Skip to content

Commit

Permalink
log.decorate: accept 0/1 bool values
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Nov 17, 2010
1 parent f772c34 commit b2be2f6
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
16 changes: 14 additions & 2 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ unsigned long git_config_ulong(const char *name, const char *value)
return ret;
}

int git_config_maybe_bool(const char *name, const char *value)
static int git_config_maybe_bool_text(const char *name, const char *value)
{
if (!value)
return 1;
Expand All @@ -427,9 +427,21 @@ int git_config_maybe_bool(const char *name, const char *value)
return -1;
}

int git_config_maybe_bool(const char *name, const char *value)
{
int v = git_config_maybe_bool_text(name, value);
if (0 <= v)
return v;
if (!strcmp(value, "0"))
return 0;
if (!strcmp(value, "1"))
return 1;
return -1;
}

int git_config_bool_or_int(const char *name, const char *value, int *is_bool)
{
int v = git_config_maybe_bool(name, value);
int v = git_config_maybe_bool_text(name, value);
if (0 <= v) {
*is_bool = 1;
return v;
Expand Down
9 changes: 9 additions & 0 deletions t/t4202-log.sh
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,15 @@ test_expect_success 'log.decorate configuration' '
git log --oneline --decorate=full >actual &&
test_cmp expect.full actual &&
git config --unset-all log.decorate &&
git config log.decorate 1 &&
git log --oneline >actual &&
test_cmp expect.short actual &&
git log --oneline --decorate=full >actual &&
test_cmp expect.full actual &&
git log --oneline --decorate=no >actual &&
test_cmp expect.none actual &&
git config --unset-all log.decorate &&
git config log.decorate short &&
git log --oneline >actual &&
Expand Down

0 comments on commit b2be2f6

Please sign in to comment.