submodule add: respect submodule.active and submodule.<name>.active

In addition to adding submodule.<name>.url to the config, set
submodule.<name>.active to true unless submodule.active is configured
and the submodule's path matches the configured pathspec.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Brandon Williams 2017-03-17 15:38:05 -07:00 committed by Junio C Hamano
parent 1f8d711548
commit 1b614c07d2
2 changed files with 35 additions and 0 deletions

View File

@ -278,6 +278,20 @@ or you are unsure what this means choose another name with the '--name' option."
fi &&
git add --force .gitmodules ||
die "$(eval_gettext "Failed to register submodule '\$sm_path'")"
# NEEDSWORK: In a multi-working-tree world, this needs to be
# set in the per-worktree config.
if git config --get submodule.active >/dev/null
then
# If the submodule being adding isn't already covered by the
# current configured pathspec, set the submodule's active flag
if ! git submodule--helper is-active "$sm_path"
then
git config submodule."$sm_name".active "true"
fi
else
git config submodule."$sm_name".active "true"
fi
}
#

View File

@ -15,6 +15,12 @@ test_expect_success 'setup' '
test_commit -C super initial &&
git -C super submodule add ../sub sub1 &&
git -C super submodule add ../sub sub2 &&
# Remove submodule.<name>.active entries in order to test in an
# environment where only URLs are present in the conifg
git -C super config --unset submodule.sub1.active &&
git -C super config --unset submodule.sub2.active &&
git -C super commit -a -m "add 2 submodules at sub{1,2}"
'
@ -83,4 +89,19 @@ test_expect_success 'is-active with submodule.active and submodule.<name>.active
git -C super submodule--helper is-active sub2
'
test_expect_success 'is-active, submodule.active and submodule add' '
test_when_finished "rm -rf super2" &&
git init super2 &&
test_commit -C super2 initial &&
git -C super2 config --add submodule.active "sub*" &&
# submodule add should only add submodule.<name>.active
# to the config if not matched by the pathspec
git -C super2 submodule add ../sub sub1 &&
test_must_fail git -C super2 config --get submodule.sub1.active &&
git -C super2 submodule add ../sub mod &&
git -C super2 config --get submodule.mod.active
'
test_done