From 27b30be686e497e6ab84dc0b25623df7aba1ba2c Mon Sep 17 00:00:00 2001 From: John Keeping Date: Sun, 28 Feb 2016 11:54:35 +0000 Subject: [PATCH 1/3] 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 Signed-off-by: Junio C Hamano --- Documentation/git-config.txt | 2 +- builtin/config.c | 5 ++++- t/t1300-repo-config.sh | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 2608ca74ac..b96149495a 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -102,7 +102,7 @@ OPTIONS given URL is returned (if no such key exists, the value for section.key is used as a fallback). When given just the 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:: For writing options: write to global `~/.gitconfig` file diff --git a/builtin/config.c b/builtin/config.c index adc772786a..b92abb74fe 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -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) { + int ret; char *section_tail; struct string_list_item *item; 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, &given_config_source, respect_includes); + ret = !values.nr; + for_each_string_list_item(item, &values) { struct urlmatch_current_candidate_value *matched = item->util; struct strbuf buf = STRBUF_INIT; @@ -431,7 +434,7 @@ static int get_urlmatch(const char *var, const char *url) free(config.url.url); free((void *)config.section); - return 0; + return ret; } static char *default_user_config(void) diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 52678e7d0a..175e73cbb6 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -1140,6 +1140,9 @@ test_expect_success 'urlmatch' ' cookieFile = /tmp/cookie.txt 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 && git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual && test_cmp expect actual && From 94c5b0e8b9276416a01646d1e4fdb73561323558 Mon Sep 17 00:00:00 2001 From: John Keeping Date: Sun, 28 Feb 2016 11:54:36 +0000 Subject: [PATCH 2/3] Documentation/git-config: use bulleted list for exit codes Using a numbered list is confusing because the exit codes are not listed in order so the numbers at the start of each line do not match the exit codes described by the following text. Switch to a bulleted list so that the only number appearing on each line is the exit code described. Signed-off-by: John Keeping Signed-off-by: Junio C Hamano --- Documentation/git-config.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index b96149495a..6a7250785e 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -58,13 +58,13 @@ that location (you can say '--local' but that is the default). This command will fail with non-zero status upon error. Some exit codes are: -. The config file is invalid (ret=3), -. can not write to the config file (ret=4), -. no section or name was provided (ret=2), -. the section or key is invalid (ret=1), -. you try to unset an option which does not exist (ret=5), -. you try to unset/set an option for which multiple lines match (ret=5), or -. you try to use an invalid regexp (ret=6). +- The config file is invalid (ret=3), +- can not write to the config file (ret=4), +- no section or name was provided (ret=2), +- the section or key is invalid (ret=1), +- you try to unset an option which does not exist (ret=5), +- you try to unset/set an option for which multiple lines match (ret=5), or +- you try to use an invalid regexp (ret=6). On success, the command returns the exit code 0. From 24990b2febec5e00ecc8c7c57614b7431b86f7a5 Mon Sep 17 00:00:00 2001 From: John Keeping Date: Sun, 28 Feb 2016 11:54:37 +0000 Subject: [PATCH 3/3] Documentation/git-config: fix --get-all description --get does not fail if a key is multi-valued, it returns the last value as described in its documentation. Clarify the description of --get-all to avoid implying that --get does fail in this case. Signed-off-by: John Keeping Signed-off-by: Junio C Hamano --- Documentation/git-config.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 6a7250785e..409df406fa 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -86,8 +86,7 @@ OPTIONS found and the last value if multiple key values were found. --get-all:: - Like get, but does not fail if the number of values for the key - is not exactly one. + Like get, but returns all values for a multi-valued key. --get-regexp:: Like --get-all, but interprets the name as a regular expression and