>> Took a little while but here is a more clean patch creating individual >> submodules for the nesting. >> >> Cheers Heiko Thanks for writing this test! > > Thanks. Stefan, does this look good to you now? Yes, though there are nits below. > It is not quite clear which step is expected to fail with the > current code by reading the test or the proposed log message. Does > "mv" refuse to work and we do not get to run "status", or does > "status" report a failure, or do we fail well before that? git-mv failing seems like a new possibility without incurring another process spawn with the new repository object. (Though then we could also just fix the recursed submodule) > The log message that only says "This does not work when ..." is not > helpful in figuring it out, either. Something like "This does not > work and fails to update the paths for its configurations" or > whatever that describes "what actually happens" (in contrast to > "what ought to happen", which you described clearly) should be > there. > > Description on how you happened to have discovered the issue feels a > lot less relevant compared to that, and it is totally useless if it > is unclear what the issue is in the first place. > >> t/t7001-mv.sh | 25 +++++++++++++++++++++++++ >> 1 file changed, 25 insertions(+) >> >> diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh >> index e365d1ff77..cbc5fb37fe 100755 >> --- a/t/t7001-mv.sh >> +++ b/t/t7001-mv.sh >> @@ -491,4 +491,29 @@ test_expect_success 'moving a submodule in nested directories' ' >> test_cmp actual expect >> ' >> >> +test_expect_failure 'moving nested submodules' ' >> + git commit -am "cleanup commit" && >> + mkdir sub_nested_nested && >> + (cd sub_nested_nested && We seem to have different styles for nested shell. I prefer outside command && ( first nested command here && ... as that aligns indentation to the nesting level. I have seen the style you use a lot in the test suite, and we do not have a guideline in Documentation/CodingGuidelines, so I do not complain too loudly. ;) >> + touch nested_level2 && >> + git init && >> + git add . && >> + git commit -m "nested level 2" >> + ) && >> + mkdir sub_nested && >> + (cd sub_nested && >> + touch nested_level1 && >> + git init && >> + git add . && >> + git commit -m "nested level 1" >> + git submodule add ../sub_nested_nested && >> + git commit -m "add nested level 2" >> + ) && >> + git submodule add ./sub_nested nested_move && >> + git commit -m "add nested_move" && >> + git submodule update --init --recursive && So far a nice setup! >> + git mv nested_move sub_nested_moved && This is the offending command that produces the bug, as it will break most subsequent commands, such as >> + git status git-status is one of the basic commands. Without status to function, I think it is hard to recover your repo without a lot of in-depth knowledge of Git (submodules). I wonder if git-status should complain more gracefully and fallback to one of --ignore-submodules={dirty, all}, that actually still works. Maybe we could introduce a new default mode for this flag, that is "none-except-on-error", though this sounds as if we're fixing symptoms instead of the root cause.