checkout: Use submodule.*.ignore settings from .git/config and .gitmodules
authorJens Lehmann <Jens.Lehmann@web.de>
Sat, 28 Aug 2010 14:50:07 +0000 (16:50 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Aug 2010 07:37:37 +0000 (00:37 -0700)
For "git status" and the diff family the submodule.*.ignore settings from
.git/config and .gitmodules can be used to override the default set via
diff.ignoreSubmodules on a per-submodule basis. Let's do this consistently
and teach checkout to use these settings too.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/checkout.c
t/t2013-checkout-submodule.sh
index e73bfe3403e0d80aced9607321792bb60779b109..829442932f1711ecaea99180e7d3f6875f963832 100644 (file)
@@ -608,6 +608,10 @@ static int git_checkout_config(const char *var, const char *value, void *cb)
                handle_ignore_submodules_arg(&opts->diff_options, value);
                return 0;
        }
+
+       if (!prefixcmp(var, "submodule."))
+               return parse_submodule_config_option(var, value);
+
        return git_xmerge_config(var, value, NULL);
 }
 
@@ -689,6 +693,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
        memset(&opts, 0, sizeof(opts));
        memset(&new, 0, sizeof(new));
 
+       gitmodules_config();
        git_config(git_checkout_config, &opts);
 
        opts.track = BRANCH_TRACK_UNSPECIFIED;
index 3beb0b3ed7bb62ce004979ffc8910ef3b992a0a3..70edbb33e26c0ee6d5cec81d2417c8a830d6fab1 100755 (executable)
@@ -46,4 +46,20 @@ test_expect_success '"checkout <submodule>" honors diff.ignoreSubmodules' '
        ! test -s actual
 '
 
+test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .gitmodules' '
+       git config diff.ignoreSubmodules none &&
+       git config -f .gitmodules submodule.submodule.path submodule &&
+       git config -f .gitmodules submodule.submodule.ignore untracked &&
+       git checkout HEAD >actual 2>&1 &&
+       ! test -s actual
+'
+
+test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .git/config' '
+       git config -f .gitmodules submodule.submodule.ignore none &&
+       git config submodule.submodule.path submodule &&
+       git config submodule.submodule.ignore all &&
+       git checkout HEAD >actual 2>&1 &&
+       ! test -s actual
+'
+
 test_done