summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Schneider <larsxschneider@gmail.com>2017-08-18 15:04:31 -0700
committerJunio C Hamano <gitster@pobox.com>2017-08-20 23:15:35 -0700
commitd34a90478f8bb169c9cc1ede3732701f870feb37 (patch)
tree0a295c35145aa7eb16138dcbba452d33152a79b9
parent4d7268b888d7bb6d675340ec676e4239739d0f6d (diff)
downloadgit-sb/pull-honor-submodule-update-config.tar.gz
pull: respect submodule update configurationsb/pull-honor-submodule-update-config
Do not override the submodule configuration in the call to update the submodules, but give a weaker default. Reported-by: Lars Schneider <larsxschneider@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/pull.c6
-rwxr-xr-xgit-submodule.sh7
-rwxr-xr-xt/t7400-submodule-basic.sh22
3 files changed, 32 insertions, 3 deletions
diff --git a/builtin/pull.c b/builtin/pull.c
index 9b86e519b1..be4f74d764 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -553,7 +553,8 @@ static int rebase_submodules(void)
cp.git_cmd = 1;
cp.no_stdin = 1;
argv_array_pushl(&cp.args, "submodule", "update",
- "--recursive", "--rebase", NULL);
+ "--recursive", "--default-update",
+ "rebase", NULL);
return run_command(&cp);
}
@@ -565,7 +566,8 @@ static int update_submodules(void)
cp.git_cmd = 1;
cp.no_stdin = 1;
argv_array_pushl(&cp.args, "submodule", "update",
- "--recursive", "--checkout", NULL);
+ "--recursive", "--default-update",
+ "checkout", NULL);
return run_command(&cp);
}
diff --git a/git-submodule.sh b/git-submodule.sh
index e131760eec..a0caa16653 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -511,6 +511,7 @@ fetch_in_submodule () (
cmd_update()
{
# parse $args after "submodule ... update".
+ default_update="checkout"
while test $# -ne 0
do
case "$1" in
@@ -552,6 +553,10 @@ cmd_update()
--checkout)
update="checkout"
;;
+ --default-update)
+ default_update="$2"
+ shift
+ ;;
--recommend-shallow)
recommend_shallow="--recommend-shallow"
;;
@@ -619,7 +624,7 @@ cmd_update()
update_module=$(git config submodule."$name".update)
if test -z "$update_module"
then
- update_module="checkout"
+ update_module="$default_update"
fi
fi
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index dcac364c5f..ff64bf8528 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -1289,4 +1289,26 @@ test_expect_success 'init properly sets the config' '
test_must_fail git -C multisuper_clone config --get submodule.sub1.active
'
+test_expect_success 'submodule update and git pull with disabled submodule' '
+ test_when_finished "rm -rf multisuper_clone" &&
+ pwd=$(pwd) &&
+ cat <<-\EOF >expect &&
+ -sub0
+ sub1 (test2)
+ sub2 (test2)
+ sub3 (test2)
+ sub4 (test2)
+ sub5 (test2)
+ EOF
+ git clone file://"$pwd"/multisuper multisuper_clone &&
+ (
+ cd multisuper_clone &&
+ git config --local submodule.sub0.update none &&
+ git submodule update --init --recursive &&
+ git pull --recurse-submodules &&
+ git submodule status | cut -c 1,43- >actual
+ ) &&
+ test_cmp expect multisuper_clone/actual
+'
+
test_done