From: Lars Schneider <larsxschnei...@gmail.com>

Do not override the submodule configuration in the call to update
the submodules, but give a weaker default.

Reported-by: Lars Schneider <larsxschnei...@gmail.com>
Signed-off-by: Stefan Beller <sbel...@google.com>
---
  
Personally I dislike this patch, but I have no better idea for the time
being.

Thanks,
Stefan 

 builtin/pull.c             |  6 ++++--
 git-submodule.sh           |  7 ++++++-
 t/t7400-submodule-basic.sh | 22 ++++++++++++++++++++++
 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..6dbc32e686 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
-- 
2.14.0.rc0.3.g6c2e499285

Reply via email to