Browse Source

Merge branch 'sb/mv-submodule-fix' into HEAD

"git mv old new" did not adjust the path for a submodule that lives
as a subdirectory inside old/ directory correctly.

* sb/mv-submodule-fix:
  mv: allow moving nested submodules
maint
Junio C Hamano 9 years ago
parent
commit
920f2ea33b
  1. 21
      builtin/mv.c
  2. 16
      t/t7001-mv.sh

21
builtin/mv.c

@ -252,15 +252,18 @@ int cmd_mv(int argc, const char **argv, const char *prefix) @@ -252,15 +252,18 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
int pos;
if (show_only || verbose)
printf(_("Renaming %s to %s\n"), src, dst);
if (!show_only && mode != INDEX) {
if (rename(src, dst) < 0 && !ignore_errors)
die_errno(_("renaming '%s' failed"), src);
if (submodule_gitfile[i]) {
if (submodule_gitfile[i] != SUBMODULE_WITH_GITDIR)
connect_work_tree_and_git_dir(dst, submodule_gitfile[i]);
if (!update_path_in_gitmodules(src, dst))
gitmodules_modified = 1;
}
if (show_only)
continue;
if (mode != INDEX && rename(src, dst) < 0) {
if (ignore_errors)
continue;
die_errno(_("renaming '%s' failed"), src);
}
if (submodule_gitfile[i]) {
if (submodule_gitfile[i] != SUBMODULE_WITH_GITDIR)
connect_work_tree_and_git_dir(dst, submodule_gitfile[i]);
if (!update_path_in_gitmodules(src, dst))
gitmodules_modified = 1;
}

if (mode == WORKING_DIRECTORY)

16
t/t7001-mv.sh

@ -292,6 +292,9 @@ test_expect_success 'setup submodule' ' @@ -292,6 +292,9 @@ test_expect_success 'setup submodule' '
echo content >file &&
git add file &&
git commit -m "added sub and file" &&
mkdir -p deep/directory/hierachy &&
git submodule add ./. deep/directory/hierachy/sub &&
git commit -m "added another submodule" &&
git branch submodule
'

@ -475,4 +478,17 @@ test_expect_success 'mv -k does not accidentally destroy submodules' ' @@ -475,4 +478,17 @@ test_expect_success 'mv -k does not accidentally destroy submodules' '
git checkout .
'

test_expect_success 'moving a submodule in nested directories' '
(
cd deep &&
git mv directory ../ &&
# git status would fail if the update of linking git dir to
# work dir of the submodule failed.
git status &&
git config -f ../.gitmodules submodule.deep/directory/hierachy/sub.path >../actual &&
echo "directory/hierachy/sub" >../expect
) &&
test_cmp actual expect
'

test_done

Loading…
Cancel
Save