pathspec: only match across submodule boundaries when requested
[gitweb.git] / t / lib-submodule-update.sh
index fb4f7b014e10cd383ed42550f77a14ea9b0211ac..2d26f86800906ab1783edf10e7196adadd5f4af7 100755 (executable)
@@ -73,6 +73,7 @@ create_lib_submodule_repo () {
 
                git checkout -b "add_sub1" &&
                git submodule add ../submodule_update_sub1 sub1 &&
+               git submodule add ../submodule_update_sub1 uninitialized_sub &&
                git config -f .gitmodules submodule.sub1.ignore all &&
                git config submodule.sub1.ignore all &&
                git add .gitmodules &&
@@ -780,18 +781,14 @@ test_submodule_forced_switch () {
 # - Removing a submodule with a git directory absorbs the submodules
 #   git directory first into the superproject.
 
-test_submodule_switch_recursing () {
-       command="$1"
+test_submodule_switch_recursing_with_args () {
+       cmd_args="$1"
+       command="git $cmd_args --recurse-submodules"
        RESULTDS=success
        if test "$KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS" = 1
        then
                RESULTDS=failure
        fi
-       RESULTR=success
-       if test "$KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED" = 1
-       then
-               RESULTR=failure
-       fi
        RESULTOI=success
        if test "$KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED" = 1
        then
@@ -988,6 +985,18 @@ test_submodule_switch_recursing () {
                )
        '
 
+       test_expect_success "git -c submodule.recurse=true $cmd_args: modified submodule updates submodule work tree" '
+               prolog &&
+               reset_work_tree_to_interested add_sub1 &&
+               (
+                       cd submodule_update &&
+                       git branch -t modify_sub1 origin/modify_sub1 &&
+                       git -c submodule.recurse=true $cmd_args modify_sub1 &&
+                       test_superproject_content origin/modify_sub1 &&
+                       test_submodule_content sub1 origin/modify_sub1
+               )
+       '
+
        # Updating a submodule to an invalid sha1 doesn't update the
        # superproject nor the submodule's work tree.
        test_expect_success "$command: updating to a missing submodule commit fails" '
@@ -1003,7 +1012,7 @@ test_submodule_switch_recursing () {
        '
 
        # recursing deeper than one level doesn't work yet.
-       test_expect_$RESULTR "$command: modified submodule updates submodule recursively" '
+       test_expect_success "$command: modified submodule updates submodule recursively" '
                prolog &&
                reset_work_tree_to_interested add_nested_sub &&
                (
@@ -1020,8 +1029,9 @@ test_submodule_switch_recursing () {
 # Test that submodule contents are updated when switching between commits
 # that change a submodule, but throwing away local changes in
 # the superproject as well as the submodule is allowed.
-test_submodule_forced_switch_recursing () {
-       command="$1"
+test_submodule_forced_switch_recursing_with_args () {
+       cmd_args="$1"
+       command="git $cmd_args --recurse-submodules"
        RESULT=success
        if test "$KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS" = 1
        then
@@ -1212,14 +1222,31 @@ test_submodule_forced_switch_recursing () {
                )
        '
        # Updating a submodule from an invalid sha1 updates
-       test_expect_success "$command: modified submodule does not update submodule work tree from invalid commit" '
+       test_expect_success "$command: modified submodule does update submodule work tree from invalid commit" '
                prolog &&
                reset_work_tree_to_interested invalid_sub1 &&
                (
                        cd submodule_update &&
                        git branch -t valid_sub1 origin/valid_sub1 &&
-                       test_must_fail $command valid_sub1 &&
-                       test_superproject_content origin/invalid_sub1
+                       $command valid_sub1 &&
+                       test_superproject_content origin/valid_sub1 &&
+                       test_submodule_content sub1 origin/valid_sub1
+               )
+       '
+
+       # Old versions of Git were buggy writing the .git link file
+       # (e.g. before f8eaa0ba98b and then moving the superproject repo
+       # whose submodules contained absolute paths)
+       test_expect_success "$command: updating submodules fixes .git links" '
+               prolog &&
+               reset_work_tree_to_interested add_sub1 &&
+               (
+                       cd submodule_update &&
+                       git branch -t modify_sub1 origin/modify_sub1 &&
+                       echo "gitdir: bogus/path" >sub1/.git &&
+                       $command modify_sub1 &&
+                       test_superproject_content origin/modify_sub1 &&
+                       test_submodule_content sub1 origin/modify_sub1
                )
        '
 }