This reproduces the error as pointed out in [1], but the fix is not easy, so punt on it for now and just document what needs to be done. [1] http://stackoverflow.com/questions/32782382/git-moving-submodules-recursively-nested-submodules Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- Bart, I don't have the time fixing this properly, so this is the best I can come up with for now. Thanks, Stefan builtin/mv.c | 4 ++++ t/t7001-mv.sh | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/builtin/mv.c b/builtin/mv.c index a201426..36dd2fd 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -264,6 +264,10 @@ int cmd_mv(int argc, const char **argv, const char *prefix) connect_work_tree_and_git_dir(dst, submodule_gitfile[i]); if (!update_path_in_gitmodules(src, dst)) gitmodules_modified = 1; + /** + * NEEDSWORK: We need to recurse into the submodule + * and fix the nested submodules as well. + */ } if (mode == WORKING_DIRECTORY) diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh index 4a2570e..fe933f1 100755 --- a/t/t7001-mv.sh +++ b/t/t7001-mv.sh @@ -295,6 +295,28 @@ test_expect_success 'setup submodule' ' mkdir -p deep/directory/hierachy && git submodule add ./. deep/directory/hierachy/sub && git commit -m "added another submodule" && + mkdir inner_sub && + ( + cd inner_sub && + git init && + test_commit initial + ) && + mkdir outer_sub && + ( + cd outer_sub && + git init && + test_commit initial && + git submodule add ../inner_sub && + git commit -a -m "add an inner submodule" + ) && + git submodule add ./outer_sub ./deep/outer_sub && + git commit -a -m "add outer sub" && + git -C deep ls-tree HEAD |cut -f 2 >actual && + cat >expect <<-EOF && + directory + outer_sub + EOF + test_cmp expect actual && git branch submodule ' @@ -488,6 +510,18 @@ test_expect_success 'moving a submodule in nested directories' ' git config -f ../.gitmodules submodule.deep/directory/hierachy/sub.path >../actual && echo "directory/hierachy/sub" >../expect ) && + test_cmp actual expect && + git commit -a -m "mv a submodule in nested dir" +' + +test_expect_failure 'moving a submodule with a nested submodule' ' + git submodule update --init --recursive && + git mv deep/outer_sub outer_sub_moved && + # 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/outer_sub.path >actual && + echo "outer_sub_moved" >expect && test_cmp actual expect ' -- 2.9.0.138.g8a4fcb8.dirty -- 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