diff --git a/builtin/config.c b/builtin/config.c index 79c139c5b0..2828b6dcf1 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -314,6 +314,25 @@ static int format_config_bool_or_str(struct strbuf *buf, return 0; } +static int format_config_path(struct strbuf *buf, + const char *key_, + const char *value_, + int gently) +{ + char *v; + + if (git_config_pathname(&v, key_, value_) < 0) + return -1; + + if (v) + strbuf_addstr(buf, v); + else + return gently ? -1 : 1; /* :(optional)no-such-file */ + + free(v); + return 0; +} + /* * Format the configuration key-value pair (`key_`, `value_`) and * append it into strbuf `buf`. Returns a negative value on failure, @@ -347,16 +366,9 @@ static int format_config(const struct config_display_options *opts, res = format_config_bool_or_int(buf, key_, value_, kvi, gently); else if (opts->type == TYPE_BOOL_OR_STR) res = format_config_bool_or_str(buf, value_); - else if (opts->type == TYPE_PATH) { - char *v; - if (git_config_pathname(&v, key_, value_) < 0) - return -1; - if (v) - strbuf_addstr(buf, v); - else - return 1; /* :(optional)no-such-file */ - free((char *)v); - } else if (opts->type == TYPE_EXPIRY_DATE) { + else if (opts->type == TYPE_PATH) + res = format_config_path(buf, key_, value_, gently); + else if (opts->type == TYPE_EXPIRY_DATE) { timestamp_t t; if (git_config_expiry_date(&t, key_, value_) < 0) return -1; diff --git a/t/t1300-config.sh b/t/t1300-config.sh index 1fc8e788ee..48d9c554d8 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -2545,7 +2545,6 @@ test_expect_success 'list --type=bool-or-int shows only canonicalizable values' ' test_expect_success 'list --type=path shows only canonicalizable path values' ' - # TODO: handling of missing path is incorrect here. cat >expect <<-EOF && section.foo=True section.number=10 @@ -2554,7 +2553,7 @@ test_expect_success 'list --type=path shows only canonicalizable path values' ' section.red=red section.blue=Blue section.date=Fri Jun 4 15:46:55 2010 - section.missing=section.exists=expect + section.exists=expect EOF git config ${mode_prefix}list --type=path >actual 2>err &&