@matheusbsbs / matheus-bagliano / commits / b2be2f6aea
Fork 0

log.decorate: accept 0/1 bool values

We explicitly document "0" and "1" as synonyms for "false" and "true" in boolean config options. However, we don't actually handle those values in git_config_maybe_bool. In most cases this works fine, as we call git_config_bool, which in turn calls git_config_bool_or_int, which in turn calls git_config_maybe_bool. Values of 0/1 are considered "not bool", but their integer values end up being converted to the corresponding boolean values. However, the log.decorate code looks for maybe_bool explicitly, so that it can fall back to the "short" and "full" strings. It does not handle 0/1 at all, and considers them invalid values. We cannot simply add 0/1 support to git_config_maybe_bool. That would confuse git_config_bool_or_int, which may want to distinguish the integer values "0" and "1" from bools. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Nov 17, 2010 at 12:00 UTC b2be2f6aeaa8f4af602679e5571d2e916a259d91
2 files changed +23 -2
config.c
+14 -2
@@ -410,7 +410,7 @@ unsigned long git_config_ulong(const char *name, const char *value)
410 return ret;
411 }
412
413 -int git_config_maybe_bool(const char *name, const char *value)
413 +static int git_config_maybe_bool_text(const char *name, const char *value)
414 {
415 if (!value)
416 return 1;
@@ -427,9 +427,21 @@ int git_config_maybe_bool(const char *name, const char *value)
427 return -1;
428 }
429
430 +int git_config_maybe_bool(const char *name, const char *value)
431 +{
432 + int v = git_config_maybe_bool_text(name, value);
433 + if (0 <= v)
434 + return v;
435 + if (!strcmp(value, "0"))
436 + return 0;
437 + if (!strcmp(value, "1"))
438 + return 1;
439 + return -1;
440 +}
441 +
442 int git_config_bool_or_int(const char *name, const char *value, int *is_bool)
443 {
432 - int v = git_config_maybe_bool(name, value);
444 + int v = git_config_maybe_bool_text(name, value);
445 if (0 <= v) {
446 *is_bool = 1;
447 return v;
t/t4202-log.sh
+9
@@ -421,6 +421,15 @@ test_expect_success 'log.decorate configuration' '
421 git log --oneline --decorate=full >actual &&
422 test_cmp expect.full actual &&
423
424 + git config --unset-all log.decorate &&
425 + git config log.decorate 1 &&
426 + git log --oneline >actual &&
427 + test_cmp expect.short actual &&
428 + git log --oneline --decorate=full >actual &&
429 + test_cmp expect.full actual &&
430 + git log --oneline --decorate=no >actual &&
431 + test_cmp expect.none actual &&
432 +
433 git config --unset-all log.decorate &&
434 git config log.decorate short &&
435 git log --oneline >actual &&