config: fail if --get-urlmatch finds no value

The --get, --get-all and --get-regexp options to git-config exit with status 1 if the key is not found but --get-urlmatch succeeds in this case. Change --get-urlmatch to behave in the same way as the other --get* options so that all four are consistent. --get-color is a special case because it accepts a default value to return and so should not return an error if the key is not found. Also clarify this behaviour in the documentation. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>

John Keeping committed Feb 28, 2016 at 11:54 UTC 27b30be686e497e6ab84dc0b25623df7aba1ba2c
3 files changed +8 -2
Documentation/git-config.txt
+1 -1
@@ -102,7 +102,7 @@ OPTIONS
102 given URL is returned (if no such key exists, the value for
103 section.key is used as a fallback). When given just the
104 section as name, do so for all the keys in the section and
105 - list them.
105 + list them. Returns error code 1 if no value is found.
106
107 --global::
108 For writing options: write to global `~/.gitconfig` file
builtin/config.c
+4 -1
@@ -389,6 +389,7 @@ static int urlmatch_collect_fn(const char *var, const char *value, void *cb)
389
390 static int get_urlmatch(const char *var, const char *url)
391 {
392 + int ret;
393 char *section_tail;
394 struct string_list_item *item;
395 struct urlmatch_config config = { STRING_LIST_INIT_DUP };
@@ -415,6 +416,8 @@ static int get_urlmatch(const char *var, const char *url)
416 git_config_with_options(urlmatch_config_entry, &config,
417 &given_config_source, respect_includes);
418
419 + ret = !values.nr;
420 +
421 for_each_string_list_item(item, &values) {
422 struct urlmatch_current_candidate_value *matched = item->util;
423 struct strbuf buf = STRBUF_INIT;
@@ -431,7 +434,7 @@ static int get_urlmatch(const char *var, const char *url)
434 free(config.url.url);
435
436 free((void *)config.section);
434 - return 0;
437 + return ret;
438 }
439
440 static char *default_user_config(void)
t/t1300-repo-config.sh
+3
@@ -1140,6 +1140,9 @@ test_expect_success 'urlmatch' '
1140 cookieFile = /tmp/cookie.txt
1141 EOF
1142
1143 + test_expect_code 1 git config --bool --get-urlmatch doesnt.exist https://good.example.com >actual &&
1144 + test_must_be_empty actual &&
1145 +
1146 echo true >expect &&
1147 git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual &&
1148 test_cmp expect actual &&