t5601: add more test cases for IPV6
[gitweb.git] / t / t7001-mv.sh
index 3bfdfed1f7774edb8a87864bdb6a021dc6a185ed..69f11bd40d56cb945023ee0d299acd6d6f4a5fed 100755 (executable)
@@ -294,7 +294,8 @@ test_expect_success 'setup submodule' '
        git submodule add ./. sub &&
        echo content >file &&
        git add file &&
-       git commit -m "added sub and file"
+       git commit -m "added sub and file" &&
+       git branch submodule
 '
 
 test_expect_success 'git mv cannot move a submodule in a file' '
@@ -307,7 +308,7 @@ test_expect_success 'git mv moves a submodule with a .git directory and no .gitm
        (
                cd sub &&
                rm -f .git &&
-               cp -a ../.git/modules/sub .git &&
+               cp -R -P -p ../.git/modules/sub .git &&
                GIT_WORK_TREE=. git config --unset core.worktree
        ) &&
        mkdir mod &&
@@ -330,7 +331,7 @@ test_expect_success 'git mv moves a submodule with a .git directory and .gitmodu
        (
                cd sub &&
                rm -f .git &&
-               cp -a ../.git/modules/sub .git &&
+               cp -R -P -p ../.git/modules/sub .git &&
                GIT_WORK_TREE=. git config --unset core.worktree
        ) &&
        mkdir mod &&
@@ -349,10 +350,11 @@ test_expect_success 'git mv moves a submodule with a .git directory and .gitmodu
 '
 
 test_expect_success 'git mv moves a submodule with gitfile' '
-       rm -rf mod/sub &&
+       rm -rf mod &&
        git reset --hard &&
        git submodule update &&
        entry="$(git ls-files --stage sub | cut -f 1)" &&
+       mkdir mod &&
        (
                cd mod &&
                git mv ../sub/ .
@@ -371,11 +373,12 @@ test_expect_success 'git mv moves a submodule with gitfile' '
 '
 
 test_expect_success 'mv does not complain when no .gitmodules file is found' '
-       rm -rf mod/sub &&
+       rm -rf mod &&
        git reset --hard &&
        git submodule update &&
        git rm .gitmodules &&
        entry="$(git ls-files --stage sub | cut -f 1)" &&
+       mkdir mod &&
        git mv sub mod/sub 2>actual.err &&
        ! test -s actual.err &&
        ! test -e sub &&
@@ -389,11 +392,12 @@ test_expect_success 'mv does not complain when no .gitmodules file is found' '
 '
 
 test_expect_success 'mv will error out on a modified .gitmodules file unless staged' '
-       rm -rf mod/sub &&
+       rm -rf mod &&
        git reset --hard &&
        git submodule update &&
        git config -f .gitmodules foo.bar true &&
        entry="$(git ls-files --stage sub | cut -f 1)" &&
+       mkdir mod &&
        test_must_fail git mv sub mod/sub 2>actual.err &&
        test -s actual.err &&
        test -e sub &&
@@ -412,13 +416,14 @@ test_expect_success 'mv will error out on a modified .gitmodules file unless sta
 '
 
 test_expect_success 'mv issues a warning when section is not found in .gitmodules' '
-       rm -rf mod/sub &&
+       rm -rf mod &&
        git reset --hard &&
        git submodule update &&
        git config -f .gitmodules --remove-section submodule.sub &&
        git add .gitmodules &&
        entry="$(git ls-files --stage sub | cut -f 1)" &&
        echo "warning: Could not find section in .gitmodules where path=sub" >expect.err &&
+       mkdir mod &&
        git mv sub mod/sub 2>actual.err &&
        test_i18ncmp expect.err actual.err &&
        ! test -e sub &&
@@ -432,9 +437,10 @@ test_expect_success 'mv issues a warning when section is not found in .gitmodule
 '
 
 test_expect_success 'mv --dry-run does not touch the submodule or .gitmodules' '
-       rm -rf mod/sub &&
+       rm -rf mod &&
        git reset --hard &&
        git submodule update &&
+       mkdir mod &&
        git mv -n sub mod/sub 2>actual.err &&
        test -f sub/.git &&
        git diff-index --exit-code HEAD &&
@@ -442,4 +448,34 @@ test_expect_success 'mv --dry-run does not touch the submodule or .gitmodules' '
        git diff-files --quiet -- sub .gitmodules
 '
 
+test_expect_success 'checking out a commit before submodule moved needs manual updates' '
+       git mv sub sub2 &&
+       git commit -m "moved sub to sub2" &&
+       git checkout -q HEAD^ 2>actual &&
+       test_i18ngrep "^warning: unable to rmdir sub2:" actual &&
+       git status -s sub2 >actual &&
+       echo "?? sub2/" >expected &&
+       test_cmp expected actual &&
+       ! test -f sub/.git &&
+       test -f sub2/.git &&
+       git submodule update &&
+       test -f sub/.git &&
+       rm -rf sub2 &&
+       git diff-index --exit-code HEAD &&
+       git update-index --refresh &&
+       git diff-files --quiet -- sub .gitmodules &&
+       git status -s sub2 >actual &&
+       ! test -s actual
+'
+
+test_expect_success 'mv -k does not accidentally destroy submodules' '
+       git checkout submodule &&
+       mkdir dummy dest &&
+       git mv -k dummy sub dest &&
+       git status --porcelain >actual &&
+       grep "^R  sub -> dest/sub" actual &&
+       git reset --hard &&
+       git checkout .
+'
+
 test_done