submodule--helper init: set submodule.<name>.active
authorBrandon Williams <bmwill@google.com>
Fri, 17 Mar 2017 22:38:04 +0000 (15:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 18 Mar 2017 16:51:23 +0000 (09:51 -0700)
When initializing a submodule set the submodule.<name>.active config to
true if the module hasn't already been configured to be active by some
other means (e.g. a pathspec set in submodule.active).

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c
t/t7400-submodule-basic.sh
index 65208faa7fb4cb139326b5f8b984e315faf268d0..7700d89488ed971a4e7cdfcafcbc4c0880836ee3 100644 (file)
@@ -356,6 +356,18 @@ static void init_submodule(const char *path, const char *prefix, int quiet)
                die(_("No url found for submodule path '%s' in .gitmodules"),
                        displaypath);
 
+       /*
+        * NEEDSWORK: In a multi-working-tree world, this needs to be
+        * set in the per-worktree config.
+        *
+        * Set active flag for the submodule being initialized
+        */
+       if (!is_submodule_initialized(path)) {
+               strbuf_reset(&sb);
+               strbuf_addf(&sb, "submodule.%s.active", sub->name);
+               git_config_set_gently(sb.buf, "true");
+       }
+
        /*
         * Copy url setting when it is not set yet.
         * To look up the url in .git/config, we must not fall back to
index 3af1c00ff196db35da63cfa19772aecd0a5e49aa..cf77a3a35747e40be6a8882d5bcdda498f4c4605 100755 (executable)
@@ -1256,4 +1256,15 @@ test_expect_success 'clone and subsequent updates correctly auto-initialize subm
        test_cmp expect2 actual
 '
 
+test_expect_success 'init properly sets the config' '
+       test_when_finished "rm -rf multisuper_clone" &&
+       git clone --recurse-submodules="." \
+                 --recurse-submodules=":(exclude)sub0" \
+                 multisuper multisuper_clone &&
+
+       git -C multisuper_clone submodule init -- sub0 sub1 &&
+       git -C multisuper_clone config --get submodule.sub0.active &&
+       test_must_fail git -C multisuper_clone config --get submodule.sub1.active
+'
+
 test_done