submodule.c: add .gitmodules staging helper functions
[gitweb.git] / t / t7001-mv.sh
index 101816e718d6149a0e8ee500026455f04a8384ed..b99177f689d73e1ee4eba20ba7395271c5899032 100755 (executable)
@@ -259,4 +259,57 @@ test_expect_success SYMLINKS 'check moved symlink' '
 
 rm -f moved symlink
 
+test_expect_success 'setup submodule' '
+       git commit -m initial &&
+       git reset --hard &&
+       git submodule add ./. sub &&
+       echo content >file &&
+       git add file &&
+       git commit -m "added sub and file"
+'
+
+test_expect_success 'git mv cannot move a submodule in a file' '
+       test_must_fail git mv sub file
+'
+
+test_expect_success 'git mv moves a submodule with a .git directory and no .gitmodules' '
+       entry="$(git ls-files --stage sub | cut -f 1)" &&
+       git rm .gitmodules &&
+       (
+               cd sub &&
+               rm -f .git &&
+               cp -a ../.git/modules/sub .git &&
+               GIT_WORK_TREE=. git config --unset core.worktree
+       ) &&
+       mkdir mod &&
+       git mv sub mod/sub &&
+       ! test -e sub &&
+       [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
+       (
+               cd mod/sub &&
+               git status
+       ) &&
+       git update-index --refresh &&
+       git diff-files --quiet
+'
+
+test_expect_success 'git mv moves a submodule with gitfile' '
+       rm -rf mod/sub &&
+       git reset --hard &&
+       git submodule update &&
+       entry="$(git ls-files --stage sub | cut -f 1)" &&
+       (
+               cd mod &&
+               git mv ../sub/ .
+       ) &&
+       ! test -e sub &&
+       [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
+       (
+               cd mod/sub &&
+               git status
+       ) &&
+       git update-index --refresh &&
+       git diff-files --quiet
+'
+
 test_done