The testsuite for newly added submodule support in git mv, git rm. Signed-off-by: Petr Baudis <pasky@xxxxxxx> --- t/t7403-submodule-mvrm.sh | 242 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 242 insertions(+), 0 deletions(-) create mode 100755 t/t7403-submodule-mvrm.sh diff --git a/t/t7403-submodule-mvrm.sh b/t/t7403-submodule-mvrm.sh new file mode 100755 index 0000000..9b50d6a --- /dev/null +++ b/t/t7403-submodule-mvrm.sh @@ -0,0 +1,242 @@ +#!/bin/sh +# +# Copyright (c) 2008 Johannes Schindelin +# + +test_description='Test submodules support in git mv and git rm' + +. ./test-lib.sh + +test_expect_success setup ' + + (mkdir sub-repo && + cd sub-repo && + git init && + echo file > file && + git add file && + git commit -m "sub initial") && + (cp -r sub-repo sub2-repo && + cd sub2-repo && + echo file2 > file && + git add file && + git commit -m "sub commit2") && + git submodule add "$(pwd)/sub-repo" sub && + git submodule add "$(pwd)/sub2-repo" sub2 && + git commit -m initial && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub" && + test "$(git config -f .gitmodules submodule.sub2.path)" = "sub2" + +' + +test_expect_success 'git mv of a submodule' ' + + git mv sub sub.moved && + ! test -d sub && + test -d sub.moved/.git && + ! git ls-files --error-unmatch sub && + test "$(git ls-files --stage --error-unmatch sub.moved | cut -d " " -f 1)" = 160000 && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub.moved" && + ! git config -f .gitmodules submodule.sub.moved.path + +' + +test_expect_success 'git submodule add vs. git mv' ' + + ! git submodule add "$(pwd)/sub2-repo" sub.moved && + git submodule add "$(pwd)/sub2-repo" sub && + test -d sub/.git && + test "$(git config -f .gitmodules submodule.sub.url)" = "$(pwd)/sub-repo" && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub.moved" && + test "$(git config -f .gitmodules submodule.sub~.path)" = "sub" + +' + +test_expect_success 'git mv onto existing file' ' + + echo file > file && + git add file && + ! git mv sub.moved file && + test -d sub.moved && + ! test -d file/.git && + test "$(git ls-files --stage --error-unmatch file | cut -d " " -f 1)" = 100644 && + test "$(git ls-files --stage --error-unmatch sub.moved | cut -d " " -f 1)" = 160000 && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub.moved" + +' + +test_expect_success 'git mv onto existing directory' ' + + mkdir -p dir && + echo file > dir/file && + git add dir/file && + git mv sub.moved dir && + ! test -d sub.moved && + test -d dir/sub.moved/.git && + ! git ls-files --error-unmatch sub.moved && + test "$(git ls-files --stage --error-unmatch dir/sub.moved | cut -d " " -f 1)" = 160000 && + test "$(git config -f .gitmodules submodule.sub.path)" = "dir/sub.moved" && + git mv dir/sub.moved . && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub.moved" + +' + +test_expect_success 'git mv onto existing submodule' ' + + ! git mv sub.moved sub2 && + test -d sub.moved/.git && + ! test -d sub2/sub.moved && + test "$(git ls-files --stage --error-unmatch sub2 | cut -d " " -f 1)" = 160000 && + test "$(git ls-files --stage --error-unmatch sub.moved | cut -d " " -f 1)" = 160000 && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub.moved" + +' + +test_expect_success 'git mv of multiple submodules' ' + + mkdir -p dir && + git mv sub.moved sub dir && + ! test -d sub.moved && + ! test -d sub && + test -d dir/sub.moved/.git && + test -d dir/sub/.git && + ! git ls-files --error-unmatch sub.moved sub && + test "$(git ls-files --stage --error-unmatch dir/sub.moved dir/sub | cut -d " " -f 1 | uniq)" = 160000 && + ! git config -f .gitmodules submodule.dir.path && + test "$(git config -f .gitmodules submodule.sub.path)" = "dir/sub.moved" && + test "$(git config -f .gitmodules submodule.sub~.path)" = "dir/sub" + +' + +test_expect_success 'git mv of multiple submodules back from a subdir' ' + + (cd dir && git mv sub.moved sub .. && cd ..) && + test -d sub.moved && + test -d sub && + ! test -d dir/sub.moved/.git && + ! test -d dir/sub/.git && + ! git ls-files --error-unmatch dir/sub.moved dir/sub && + test "$(git ls-files --stage --error-unmatch sub.moved sub | cut -d " " -f 1 | uniq)" = 160000 && + test "$(git config -f .gitmodules submodule.sub.path)" = "sub.moved" && + test "$(git config -f .gitmodules submodule.sub~.path)" = "sub" + +' + +test_expect_success 'git mv of non-checked-out submodules' ' + + git clone . clone && + (cd clone && + test -d sub && + test -d sub2 && + ! test -d sub/.git && + ! test -d sub2/.git && + git ls-files --stage --error-unmatch sub sub2 > ls-files.out && + mkdir -p dir && + git mv sub sub2 dir && + ! test -d sub && + ! test -d sub2 && + test -d dir/sub && + test -d dir/sub2 && + ! git ls-files --error-unmatch sub sub2 && + test "$(git ls-files --stage --error-unmatch dir/sub dir/sub2 | cut -d " " -f 1 | uniq)" = 160000 && + git ls-files --stage --error-unmatch dir/sub dir/sub2 | sed "s#dir/##g" | diff - ls-files.out && + test "$(git config -f .gitmodules submodule.sub.path)" = "dir/sub" && + test "$(git config -f .gitmodules submodule.sub2.path)" = "dir/sub2" && + (cd dir && git mv sub2 .. && cd ..) && + test -d sub2 && + ! test -d dir/sub2 && + ! git ls-files --error-unmatch dir/sub2 && + test "$(git ls-files --stage --error-unmatch sub2 | cut -d " " -f 1)" = 160000 && + test "$(git config -f .gitmodules submodule.sub2.path)" = "sub2") + +' + +test_expect_success 'checkpointing state with git commit' ' + + git commit -m"checkpoint" -a && + (cd clone && git commit -m"clone checkpoint" -a) + +' + +test_expect_success 'git rm of a regular submodule' ' + + git rm sub2 && + test -d sub2/.git && + ! git ls-files --error-unmatch sub2 && + ! git config -f .gitmodules submodule.sub2.path && + ! git config -f .gitmodules submodule.sub2.url + +' + +test_expect_success 'git rm of a submodule with name different from path' ' + + git rm sub.moved && + test -d sub.moved/.git && + ! git ls-files --error-unmatch sub.moved && + ! git config -f .gitmodules submodule.sub.path && + ! git config -f .gitmodules submodule.sub.url + +' + +test_expect_success 'git rm of a modified submodule' ' + + git mv sub dir/sub && # more fun with richer path + (cd dir/sub && + echo mod > file && + git commit -m "sub mod" file) && + git add dir/sub && + ! git rm dir/sub && + test -d dir/sub/.git && + test "$(git ls-files --stage --error-unmatch dir/sub | cut -d " " -f 1)" = "160000" && + git config -f .gitmodules submodule.sub~.path && + git config -f .gitmodules submodule.sub~.url && + git rm -f dir/sub && + test -d dir/sub/.git && + ! git ls-files --error-unmatch dir/sub && + ! git config -f .gitmodules submodule.sub~.path && + ! git config -f .gitmodules submodule.sub~.url + +' + +test_expect_success 'git rm of a submodule from within a subdirectory' ' + + git submodule add "$(pwd)/sub-repo" sub-torm && + mkdir -p dir && + # -f since we did not commit the submodule + (cd dir && git rm -f ../sub-torm && cd ..) && + test -d sub-torm/.git && + ! git ls-files --error-unmatch sub-torm && + ! git config -f .gitmodules submodule.sub-torm.path && + ! git config -f .gitmodules submodule.sub-torm.url + +' + +test_expect_success 'git rm of a non-checked-out submodule' ' + + (cd clone && + test -d dir/sub && + ! test -d dir/sub/.git && + git rm dir/sub && + ! test -d dir/sub && + ! git ls-files --error-unmatch dir/sub && + ! git config -f .gitmodules submodule.sub.path && + ! git config -f .gitmodules submodule.sub.url) + +' + +test_expect_success 'git rm of a non-checked-out submodule w/ different working tree' ' + + (cd clone && + rmdir sub2 && + echo cunning > sub2 && + ! git rm sub2 && + test -f sub2 && + test "$(git ls-files --stage --error-unmatch sub2 | cut -d " " -f 1)" = "160000" && + git rm -f sub2 && + ! test -e sub2 && + ! git ls-files --error-unmatch sub2 && + ! git config -f .gitmodules submodule.sub2.path && + ! git config -f .gitmodules submodule.sub2.url) + +' + +test_done -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html