Merge branch 'nd/no-more-fnmatch'
[gitweb.git] / t / t7406-submodule-update.sh
index f0b33053ab01c692a4dda15c0f631aaa45fb81b9..28ca76384f6472b5d74564450ed122da9d49fe70 100755 (executable)
@@ -63,6 +63,9 @@ test_expect_success 'setup a submodule tree' '
         git submodule add ../none none &&
         test_tick &&
         git commit -m "none"
+       ) &&
+       (cd super &&
+        git tag initial-setup
        )
 '
 
@@ -323,6 +326,21 @@ test_expect_success 'submodule update - command in .git/config catches failure'
        )
 '
 
+test_expect_success 'submodule init does not copy command into .git/config' '
+       (cd super &&
+        H=$(git ls-files -s submodule | cut -d" " -f2) &&
+        mkdir submodule1 &&
+        git update-index --add --cacheinfo 160000 $H submodule1 &&
+        git config -f .gitmodules submodule.submodule1.path submodule1 &&
+        git config -f .gitmodules submodule.submodule1.url ../submodule &&
+        git config -f .gitmodules submodule.submodule1.update !false &&
+        git submodule init submodule1 &&
+        echo "none" >expect &&
+        git config submodule.submodule1.update >actual &&
+        test_cmp expect actual
+       )
+'
+
 test_expect_success 'submodule init picks up rebase' '
        (cd super &&
         git config -f .gitmodules submodule.rebasing.update rebase &&
@@ -688,7 +706,7 @@ test_expect_success 'submodule update places git-dir in superprojects git-dir re
        git clone super_update_r super_update_r2 &&
        (cd super_update_r2 &&
         git submodule update --init --recursive >actual &&
-        test_i18ngrep "Submodule path .submodule/subsubmodule.: checked out" actual &&
+        test_i18ngrep "Submodule path .submodule/subsubmodule.: .git reset --hard -q" actual &&
         (cd submodule/subsubmodule &&
          git log > ../../expected
         ) &&
@@ -747,6 +765,50 @@ test_expect_success 'submodule update clone shallow submodule' '
         (cd submodule &&
          test 1 = $(git log --oneline | wc -l)
         )
+)
+'
+
+test_expect_success 'submodule update --recursive drops module name before recursing' '
+       (cd super2 &&
+        (cd deeper/submodule/subsubmodule &&
+         git checkout HEAD^
+        ) &&
+        git submodule update --recursive deeper/submodule >actual &&
+        test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual
        )
 '
+
+test_expect_success 'submodule update --checkout clones detached HEAD' '
+       git clone super super4 &&
+       echo "detached HEAD" >expected &&
+       (cd super4 &&
+        git reset --hard initial-setup &&
+        git submodule init submodule &&
+        git submodule update >> /tmp/log 2>&1 &&
+        (cd submodule &&
+         git symbolic-ref HEAD > ../../actual ||
+         echo "detached HEAD" > ../../actual
+        )
+       ) &&
+       test_cmp actual expected &&
+       rm -rf super4
+'
+
+test_expect_success 'submodule update --merge clones attached HEAD' '
+       git clone super super4 &&
+       echo "refs/heads/master" >expected &&
+       (cd super4 &&
+        git reset --hard initial-setup &&
+        git submodule init submodule &&
+        git config submodule.submodule.update merge &&
+        git submodule update --merge &&
+        (cd submodule &&
+         git symbolic-ref HEAD > ../../actual ||
+         echo "detached HEAD" > ../../actual
+        )
+       ) &&
+       test_cmp actual expected &&
+       rm -rf super4
+'
+
 test_done