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>
This commit is contained in:
John Keeping 2016-02-28 11:54:35 +00:00 committed by Junio C Hamano
parent 326e5bc91e
commit 27b30be686
3 changed files with 8 additions and 2 deletions

View File

@ -102,7 +102,7 @@ OPTIONS
given URL is returned (if no such key exists, the value for given URL is returned (if no such key exists, the value for
section.key is used as a fallback). When given just the section.key is used as a fallback). When given just the
section as name, do so for all the keys in the section and section as name, do so for all the keys in the section and
list them. list them. Returns error code 1 if no value is found.
--global:: --global::
For writing options: write to global `~/.gitconfig` file For writing options: write to global `~/.gitconfig` file

View File

@ -389,6 +389,7 @@ static int urlmatch_collect_fn(const char *var, const char *value, void *cb)
static int get_urlmatch(const char *var, const char *url) static int get_urlmatch(const char *var, const char *url)
{ {
int ret;
char *section_tail; char *section_tail;
struct string_list_item *item; struct string_list_item *item;
struct urlmatch_config config = { STRING_LIST_INIT_DUP }; struct urlmatch_config config = { STRING_LIST_INIT_DUP };
@ -415,6 +416,8 @@ static int get_urlmatch(const char *var, const char *url)
git_config_with_options(urlmatch_config_entry, &config, git_config_with_options(urlmatch_config_entry, &config,
&given_config_source, respect_includes); &given_config_source, respect_includes);
ret = !values.nr;
for_each_string_list_item(item, &values) { for_each_string_list_item(item, &values) {
struct urlmatch_current_candidate_value *matched = item->util; struct urlmatch_current_candidate_value *matched = item->util;
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
@ -431,7 +434,7 @@ static int get_urlmatch(const char *var, const char *url)
free(config.url.url); free(config.url.url);
free((void *)config.section); free((void *)config.section);
return 0; return ret;
} }
static char *default_user_config(void) static char *default_user_config(void)

View File

@ -1140,6 +1140,9 @@ test_expect_success 'urlmatch' '
cookieFile = /tmp/cookie.txt cookieFile = /tmp/cookie.txt
EOF EOF
test_expect_code 1 git config --bool --get-urlmatch doesnt.exist https://good.example.com >actual &&
test_must_be_empty actual &&
echo true >expect && echo true >expect &&
git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual && git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual &&
test_cmp expect actual && test_cmp expect actual &&