]> git.ipfire.org Git - thirdparty/git.git/commitdiff
for-each-repo: error on bad --config
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 28 Mar 2023 14:04:25 +0000 (16:04 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 Mar 2023 14:37:53 +0000 (07:37 -0700)
As noted in 6c62f015520 (for-each-repo: do nothing on empty config,
2021-01-08) this command wants to ignore a non-existing config key,
but let's not conflate that with bad config.

Before this, all these added tests would pass with an exit code of 0.

We could preserve the comment added in 6c62f015520, but now that we're
directly using the documented repo_config_get_value_multi() value it's
just narrating something that should be obvious from the API use, so
let's drop it.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/for-each-repo.c
t/t0068-for-each-repo.sh

index fd0e7739e6a92d8c32be478a180b688fab46e453..224164addb3dfcca8a1da16e11a35e302324ab2b 100644 (file)
@@ -32,6 +32,7 @@ int cmd_for_each_repo(int argc, const char **argv, const char *prefix)
        static const char *config_key = NULL;
        int i, result = 0;
        const struct string_list *values;
+       int err;
 
        const struct option options[] = {
                OPT_STRING(0, "config", &config_key, N_("config"),
@@ -45,11 +46,11 @@ int cmd_for_each_repo(int argc, const char **argv, const char *prefix)
        if (!config_key)
                die(_("missing --config=<config>"));
 
-       /*
-        * Do nothing on an empty list, which is equivalent to the case
-        * where the config variable does not exist at all.
-        */
-       if (repo_config_get_value_multi(the_repository, config_key, &values))
+       err = repo_config_get_value_multi(the_repository, config_key, &values);
+       if (err < 0)
+               usage_msg_optf(_("got bad config --config=%s"),
+                              for_each_repo_usage, options, config_key);
+       else if (err)
                return 0;
 
        for (i = 0; !result && i < values->nr; i++)
index c6e0d655630638853b6831350618bc10b15de6e2..19ceaa546ea317e628702595518723e6ebf71e1b 100755 (executable)
@@ -39,4 +39,10 @@ test_expect_success 'do nothing on empty config' '
        git for-each-repo --config=bogus.config -- help --no-such-option
 '
 
+test_expect_success 'error on bad config keys' '
+       test_expect_code 129 git for-each-repo --config=a &&
+       test_expect_code 129 git for-each-repo --config=a.b. &&
+       test_expect_code 129 git for-each-repo --config="'\''.b"
+'
+
 test_done