t/t7407: demonstrate that the command called by 'submodule foreach' loses stdin
[gitweb.git] / t / t7407-submodule-foreach.sh
index db9365b6454b18eb07f5c0798e13e18d696498c6..97b7562dbfe510daa86f9888a4a5bc401c789b6c 100755 (executable)
@@ -16,7 +16,7 @@ test_expect_success 'setup a submodule tree' '
        echo file > file &&
        git add file &&
        test_tick &&
-       git commit -m upstream
+       git commit -m upstream &&
        git clone . super &&
        git clone super submodule &&
        (
@@ -30,7 +30,7 @@ test_expect_success 'setup a submodule tree' '
                        submodule.sub2 submodule.foo2 &&
                git config -f .gitmodules --rename-section \
                        submodule.sub3 submodule.foo3 &&
-               git add .gitmodules
+               git add .gitmodules &&
                test_tick &&
                git commit -m "submodules" &&
                git submodule init sub1 &&
@@ -226,6 +226,21 @@ test_expect_success 'test "status --recursive"' '
        test_cmp expect actual
 '
 
+sed -e "/nested1 /s/.*/+$nested1sha1 nested1 (file2~1)/;/sub[1-3]/d" < expect > expect2
+mv -f expect2 expect
+
+test_expect_success 'ensure "status --cached --recursive" preserves the --cached flag' '
+       (
+               cd clone3 &&
+               (
+                       cd nested1 &&
+                       test_commit file2
+               ) &&
+               git submodule status --cached --recursive -- nested1 > ../actual
+       ) &&
+       test_cmp expect actual
+'
+
 test_expect_success 'use "git clone --recursive" to checkout all submodules' '
        git clone --recursive super clone4 &&
        test -d clone4/.git &&
@@ -238,4 +253,57 @@ test_expect_success 'use "git clone --recursive" to checkout all submodules' '
        test -d clone4/nested1/nested2/nested3/submodule/.git
 '
 
+test_expect_success 'test "update --recursive" with a flag with spaces' '
+       git clone super "common objects" &&
+       git clone super clone5 &&
+       (
+               cd clone5 &&
+               test ! -d nested1/.git &&
+               git submodule update --init --recursive --reference="$(dirname "$PWD")/common objects" &&
+               test -d nested1/.git &&
+               test -d nested1/nested2/.git &&
+               test -d nested1/nested2/nested3/.git &&
+               test -f nested1/.git/objects/info/alternates &&
+               test -f nested1/nested2/.git/objects/info/alternates &&
+               test -f nested1/nested2/nested3/.git/objects/info/alternates
+       )
+'
+
+test_expect_success 'use "update --recursive nested1" to checkout all submodules rooted in nested1' '
+       git clone super clone6 &&
+       (
+               cd clone6 &&
+               test ! -d sub1/.git &&
+               test ! -d sub2/.git &&
+               test ! -d sub3/.git &&
+               test ! -d nested1/.git &&
+               git submodule update --init --recursive -- nested1 &&
+               test ! -d sub1/.git &&
+               test ! -d sub2/.git &&
+               test ! -d sub3/.git &&
+               test -d nested1/.git &&
+               test -d nested1/nested2/.git &&
+               test -d nested1/nested2/nested3/.git &&
+               test -d nested1/nested2/nested3/submodule/.git
+       )
+'
+
+test_expect_failure 'command passed to foreach retains notion of stdin' '
+       (
+               cd super &&
+               git submodule foreach echo success >../expected &&
+               yes | git submodule foreach "read y && test \"x\$y\" = xy && echo success" >../actual
+       ) &&
+       test_cmp expected actual
+'
+
+test_expect_failure 'command passed to foreach --recursive retains notion of stdin' '
+       (
+               cd clone2 &&
+               git submodule foreach --recursive echo success >../expected &&
+               yes | git submodule foreach --recursive "read y && test \"x\$y\" = xy && echo success" >../actual
+       ) &&
+       test_cmp expected actual
+'
+
 test_done