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>
This commit is contained in:
parent
f772c34ce0
commit
b2be2f6aea
16
config.c
16
config.c
@ -410,7 +410,7 @@ unsigned long git_config_ulong(const char *name, const char *value)
|
|||||||
return ret;
|
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)
|
if (!value)
|
||||||
return 1;
|
return 1;
|
||||||
@ -427,9 +427,21 @@ int git_config_maybe_bool(const char *name, const char *value)
|
|||||||
return -1;
|
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 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) {
|
if (0 <= v) {
|
||||||
*is_bool = 1;
|
*is_bool = 1;
|
||||||
return v;
|
return v;
|
||||||
|
@ -421,6 +421,15 @@ test_expect_success 'log.decorate configuration' '
|
|||||||
git log --oneline --decorate=full >actual &&
|
git log --oneline --decorate=full >actual &&
|
||||||
test_cmp expect.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 --unset-all log.decorate &&
|
||||||
git config log.decorate short &&
|
git config log.decorate short &&
|
||||||
git log --oneline >actual &&
|
git log --oneline >actual &&
|
||||||
|
Loading…
Reference in New Issue
Block a user