l10n: zh_CN: Revision for git v2.21.0 l10n
[gitweb.git] / t / t5526-fetch-submodules.sh
index ce3af928437dee01a168cb3350403c0726229bbd..63205dfdf962dc31c9db5ba038674e12760a9909 100755 (executable)
@@ -379,7 +379,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
                        git config -f .gitmodules submodule.subdir/deepsubmodule.fetchRecursive false
                ) &&
                git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err &&
-               git config --unset fetch.recurseSubmodules
+               git config --unset fetch.recurseSubmodules &&
                (
                        cd submodule &&
                        git config --unset -f .gitmodules submodule.subdir/deepsubmodule.fetchRecursive
@@ -495,7 +495,6 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
        git add submodule &&
        git rm .gitmodules &&
        git commit -m "new submodule without .gitmodules" &&
-       printf "" >expect.out &&
        head2=$(git rev-parse --short HEAD) &&
        echo "From $pwd/." >expect.err.2 &&
        echo "   $head1..$head2  master     -> origin/master" >>expect.err.2 &&
@@ -514,7 +513,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
                git config --unset fetch.recurseSubmodules &&
                git reset --hard
        ) &&
-       test_i18ncmp expect.out actual.out &&
+       test_must_be_empty actual.out &&
        test_i18ncmp expect.err.2 actual.err &&
        git checkout HEAD^ -- .gitmodules &&
        git add .gitmodules &&
@@ -525,6 +524,8 @@ test_expect_success 'fetching submodules respects parallel settings' '
        git config fetch.recurseSubmodules true &&
        (
                cd downstream &&
+               GIT_TRACE=$(pwd)/trace.out git fetch &&
+               grep "1 tasks" trace.out &&
                GIT_TRACE=$(pwd)/trace.out git fetch --jobs 7 &&
                grep "7 tasks" trace.out &&
                git config submodule.fetchJobs 8 &&
@@ -601,4 +602,121 @@ test_expect_success "fetch new commits when submodule got renamed" '
        test_cmp expect actual
 '
 
+test_expect_success "fetch new submodule commits on-demand outside standard refspec" '
+       # add a second submodule and ensure it is around in downstream first
+       git clone submodule sub1 &&
+       git submodule add ./sub1 &&
+       git commit -m "adding a second submodule" &&
+       git -C downstream pull &&
+       git -C downstream submodule update --init --recursive &&
+
+       git checkout --detach &&
+
+       C=$(git -C submodule commit-tree -m "new change outside refs/heads" HEAD^{tree}) &&
+       git -C submodule update-ref refs/changes/1 $C &&
+       git update-index --cacheinfo 160000 $C submodule &&
+       test_tick &&
+
+       D=$(git -C sub1 commit-tree -m "new change outside refs/heads" HEAD^{tree}) &&
+       git -C sub1 update-ref refs/changes/2 $D &&
+       git update-index --cacheinfo 160000 $D sub1 &&
+
+       git commit -m "updated submodules outside of refs/heads" &&
+       E=$(git rev-parse HEAD) &&
+       git update-ref refs/changes/3 $E &&
+       (
+               cd downstream &&
+               git fetch --recurse-submodules origin refs/changes/3:refs/heads/my_branch &&
+               git -C submodule cat-file -t $C &&
+               git -C sub1 cat-file -t $D &&
+               git checkout --recurse-submodules FETCH_HEAD
+       )
+'
+
+test_expect_success 'fetch new submodule commit on-demand in FETCH_HEAD' '
+       # depends on the previous test for setup
+
+       C=$(git -C submodule commit-tree -m "another change outside refs/heads" HEAD^{tree}) &&
+       git -C submodule update-ref refs/changes/4 $C &&
+       git update-index --cacheinfo 160000 $C submodule &&
+       test_tick &&
+
+       D=$(git -C sub1 commit-tree -m "another change outside refs/heads" HEAD^{tree}) &&
+       git -C sub1 update-ref refs/changes/5 $D &&
+       git update-index --cacheinfo 160000 $D sub1 &&
+
+       git commit -m "updated submodules outside of refs/heads" &&
+       E=$(git rev-parse HEAD) &&
+       git update-ref refs/changes/6 $E &&
+       (
+               cd downstream &&
+               git fetch --recurse-submodules origin refs/changes/6 &&
+               git -C submodule cat-file -t $C &&
+               git -C sub1 cat-file -t $D &&
+               git checkout --recurse-submodules FETCH_HEAD
+       )
+'
+
+test_expect_success 'fetch new submodule commits on-demand without .gitmodules entry' '
+       # depends on the previous test for setup
+
+       git config -f .gitmodules --remove-section submodule.sub1 &&
+       git add .gitmodules &&
+       git commit -m "delete gitmodules file" &&
+       git checkout -B master &&
+       git -C downstream fetch &&
+       git -C downstream checkout origin/master &&
+
+       C=$(git -C submodule commit-tree -m "yet another change outside refs/heads" HEAD^{tree}) &&
+       git -C submodule update-ref refs/changes/7 $C &&
+       git update-index --cacheinfo 160000 $C submodule &&
+       test_tick &&
+
+       D=$(git -C sub1 commit-tree -m "yet another change outside refs/heads" HEAD^{tree}) &&
+       git -C sub1 update-ref refs/changes/8 $D &&
+       git update-index --cacheinfo 160000 $D sub1 &&
+
+       git commit -m "updated submodules outside of refs/heads" &&
+       E=$(git rev-parse HEAD) &&
+       git update-ref refs/changes/9 $E &&
+       (
+               cd downstream &&
+               git fetch --recurse-submodules origin refs/changes/9 &&
+               git -C submodule cat-file -t $C &&
+               git -C sub1 cat-file -t $D &&
+               git checkout --recurse-submodules FETCH_HEAD
+       )
+'
+
+test_expect_success 'fetch new submodule commit intermittently referenced by superproject' '
+       # depends on the previous test for setup
+
+       D=$(git -C sub1 commit-tree -m "change 10 outside refs/heads" HEAD^{tree}) &&
+       E=$(git -C sub1 commit-tree -m "change 11 outside refs/heads" HEAD^{tree}) &&
+       F=$(git -C sub1 commit-tree -m "change 12 outside refs/heads" HEAD^{tree}) &&
+
+       git -C sub1 update-ref refs/changes/10 $D &&
+       git update-index --cacheinfo 160000 $D sub1 &&
+       git commit -m "updated submodules outside of refs/heads" &&
+
+       git -C sub1 update-ref refs/changes/11 $E &&
+       git update-index --cacheinfo 160000 $E sub1 &&
+       git commit -m "updated submodules outside of refs/heads" &&
+
+       git -C sub1 update-ref refs/changes/12 $F &&
+       git update-index --cacheinfo 160000 $F sub1 &&
+       git commit -m "updated submodules outside of refs/heads" &&
+
+       G=$(git rev-parse HEAD) &&
+       git update-ref refs/changes/13 $G &&
+       (
+               cd downstream &&
+               git fetch --recurse-submodules origin refs/changes/13 &&
+
+               git -C sub1 cat-file -t $D &&
+               git -C sub1 cat-file -t $E &&
+               git -C sub1 cat-file -t $F
+       )
+'
+
 test_done