git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] add test for bug in git-mv for recursive submodules

From
Heiko Voigt <hvoigt@hvoigt.net>
Date
Sep 20, 2017, 13:46 UTC
Message-ID
<20170920134633.GA89070@book.hvoigt.net>
In-Reply-To
<CAGZ79kaycuiFuB1m0SiyKoZ6UyEBCMiipYXkavN+NNyCZaY1=Q@mail.gmail.com>
On Mon, Sep 18, 2017 at 01:03:32PM -0700, Stefan Beller wrote:
Show 6 quoted lines
> >> Took a little while but here is a more clean patch creating individual
> >> submodules for the nesting.
> >>
> >> Cheers Heiko
> 
> Thanks for writing this test!
No worries. :)
Show 12 quoted lines
> > 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)

It is mv that fails to update everything necessary when using it with recursively nested submodules. So the git-mv command does not report a failure here. As an interim fix it could maybe report an error when encountering nested submodules but the real fix would be to teach it to recursively spawn the appropriate git-mv commands.

Show 10 quoted lines
> > 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.

Sorry about being a bit brief here. How about dropping that information how I discovered the bug then and change the commit message to something like this:

    add test for bug in git-mv for recursive submodules
    When using git-mv with a submodule it will detect that and update
    the paths for its configurations (.gitmodules, worktree and
    gitfile). This does not work in case it encounters nested
    submodules. In that case it only updates the configurations for the
    submodule directly underneath the superproject and fails to update
    the paths for the submodules nested more deeply. This in turn leads
    to the symptom that git status reports that it can not chdir to the
    nested submodule in its old location.
    Lets add a test to document.
?
Show 27 quoted lines
> >>  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. ;)

Yeah we have some different styles it seems ;) So here some reasoning behind my style:

I actually would agree on your style if 'first nested command' was any arbitrary command but when I use my style it is always when I use a nested shell for changing into some directory, doing something there and then being able to return to the previous directory by closing the nested shell. So for me the 'cd somewhere' belongs to the brackets similarly like a condition definition belongs to the if it is used with.

Show 19 quoted lines
> >> +             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!
Thanks.
> >> +     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
Yes.
Show 13 quoted lines
> >> +     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.

I think we should rather fix the root cause. For me git-mv is actually breaking the repository and as described above one possible interim solution for me would be for 'git-mv' to error out and tell the user that it does currently not work on recursively nested submodules.

Cheers Heiko
Previous: Stefan Beller
Message 8 of 8 in “add test for bug in git-mv with nested submodules”
  1. add test for bug in git-mv with nested submodulesHeiko Voigt, Aug 17, 2017
  2. Stefan BellerAug 17, 2017
  3. Heiko VoigtAug 18, 2017
  4. Stefan BellerAug 18, 2017
  5. add test for bug in git-mv for recursive submodulesHeiko Voigt, Sep 15, 2017
  6. Junio C HamanoSep 17, 2017
  7. Stefan BellerSep 18, 2017
  8. Heiko VoigtSep 20, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.