git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Philippe Blain <levraiphilippeblain@gmail.com>
To: "Peter Kästle" <peter.kaestle@nokia.com>
Cc: Junio C Hamano <gitster@pobox.com>,
	Ralf Thielow <ralf.thielow@gmail.com>,
	Git mailing list <git@vger.kernel.org>
Subject: Re: BUG in fetching non-checked out submodule
Date: Thu, 3 Dec 2020 10:25:40 -0500	[thread overview]
Message-ID: <CADtb9DxTgEWfOF7jDGGt3eQSCaaqeiyJfS4V-e0SyPenE2SXWA@mail.gmail.com> (raw)
In-Reply-To: <04968f5c-c8bd-c57e-d646-7c9f7691e1a8@nokia.com>

Hello Peter,

Le jeu. 3 déc. 2020, à 02 h 54, Peter Kästle <peter.kaestle@nokia.com> a écrit :
>
> Hi,
>
> On 03.12.20 00:06, Junio C Hamano wrote:
> > Philippe Blain <levraiphilippeblain@gmail.com> writes:
> >
> >> Thanks for bisecting it. That commit wanted to fix a different bug
> >> related to nested submodules, and the route taken was simply
> >> reverting an earlier commit (a62387b (submodule.c: fetch in
> >> submodules git directory instead of in worktree, 2018-11-28).
> >>
> >> As you discovered, it breaks other scenarios.
> >>
> >>>
> >>> $ git version
> >>> git version 2.29.2.435.g72ffeb997e
> >>>
> >>> $ git config --get submodule.recurse
> >>> true
> >
> > I think the current situation is probably worse.
> >
> > As a short-term fix, we should revert 1b7ac4e6d4 until we can come
> > up with a real fix, probably.
>
> Junio: This is why I originally intended to commit the test case for the
> testsuite separated from the revert and wanted to start a discussion
> about the actual real fix for the issue:
> https://public-inbox.org/git/1604413399-63090-1-git-send-email-peter.kaestle@nokia.com/
>
> My proposal would be to revert 1b7ac4e6d4 and isolate the test case
> "test_expect_success 'setup nested submodule fetch test' '" make it
> "test_expect_failure" and apply it instead, until we come up with a real
> solution.


I think I have the real solution. I did some debugging and I think it
is quite easy:
In 'get_next_submodule', 'get_submodule_repo_for(spf->r, task->sub)'
fails to get a repo pointer for the submodule repository, since it is
not initialized. That
is normal. Then we go in the "else" branch, and hit this code:

/*
* An empty directory is normal,
* the submodule is not initialized
*/
if (S_ISGITLINK(ce->ce_mode) &&
!is_empty_dir(ce->name)) {

'is_empty_dir' receives ce->name, but the current working directory is the
Git directory of 'middle', so clearly is_empty_dir returns false, as

/path/to/git/t/trash
directory.t5526-fetch-submodules/B/.git/modules/middle/inner

is a non-existent path. The path that we should send is the worktree
of inner, ie.
the concatenation of spf->r->worktree and ce->name. This would give

/path/to/git/t/trash directory.t5526-fetch-submodules/B/middle/inner,

which is an empty directory since the inner submodule is not initialized,
and we would not get the "Could not access submodule inner" error
that you wanted to solve.


Cheers,

Philippe.

  reply	other threads:[~2020-12-03 15:26 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-02 15:56 BUG in fetching non-checked out submodule Ralf Thielow
2020-12-02 17:19 ` Philippe Blain
2020-12-02 23:06   ` Junio C Hamano
2020-12-03  7:54     ` Peter Kästle
2020-12-03 15:25       ` Philippe Blain [this message]
2020-12-03 15:33         ` Peter Kästle
2020-12-03 18:12           ` Junio C Hamano
2020-12-04 15:23           ` [PATCH] submodules: fix of regression on fetching of non-init subsub-repo Peter Kaestle
2020-12-04 18:06             ` Eric Sunshine
2020-12-07  8:28               ` Peter Kästle
2020-12-07  8:40                 ` Eric Sunshine
2020-12-07 13:46                   ` [PATCH v2] " Peter Kaestle
2020-12-07 18:42                     ` Philippe Blain
2020-12-07 19:43                       ` Junio C Hamano
2020-12-08  8:46                         ` Peter Kästle
2020-12-07 19:56                       ` Junio C Hamano
2020-12-08 14:06                       ` Peter Kästle
2020-12-07 19:22                     ` Junio C Hamano
2020-12-07 20:44                       ` Philippe Blain
2020-12-07 21:02                         ` Junio C Hamano
2020-12-07 21:10                           ` Junio C Hamano
2020-12-08 14:58                       ` Peter Kästle
2020-12-08 15:42                         ` [PATCH v3] " Peter Kaestle
2020-12-08 15:51                           ` Peter Kästle
2020-12-08 20:46                           ` Junio C Hamano
2020-12-08 23:25                           ` Philippe Blain
2020-12-09  9:58                             ` Peter Kästle
2020-12-09 10:58                               ` [PATCH v4] " Peter Kaestle
2020-12-09 14:00                                 ` Philippe Blain
2020-12-03  7:45   ` BUG in fetching non-checked out submodule Ralf Thielow
2020-12-03  8:20     ` Peter Kästle
2020-12-03  9:38       ` Ralf Thielow
2020-12-03  9:43         ` Peter Kästle
2020-12-03 12:30           ` Ralf Thielow
2020-12-03 15:10             ` Peter Kästle
2020-12-03 16:45               ` Ralf Thielow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADtb9DxTgEWfOF7jDGGt3eQSCaaqeiyJfS4V-e0SyPenE2SXWA@mail.gmail.com \
    --to=levraiphilippeblain@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peter.kaestle@nokia.com \
    --cc=ralf.thielow@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).