From: Sergei Golubchik <vuvova@gmail.com>
To: Taylor Blau <me@ttaylorr.com>
Cc: git@vger.kernel.org
Subject: Re: bug: submodule update fails to fetch
Date: Thu, 22 Jun 2023 18:39:36 +0200 [thread overview]
Message-ID: <ZJR5SPDj4Wt_gmRO@pweza> (raw)
In-Reply-To: <ZJRHlJvE4BMue1/Z@nand.local>
Hi, Taylor,
On Jun 22, Taylor Blau wrote:
> On Thu, Jun 22, 2023 at 01:09:07PM +0200, Sergei Golubchik wrote:
> > Hi,
> >
> > Sometimes (my local repository has lots of branches) after switching
> > branches
> >
> > git submodule update --init --recursive
> >
> > fails with something like
> >
> > fatal: transport 'file' not allowed
> > fatal: Fetched in submodule path 'wsrep-lib', but it did not contain e238c0d240c2557229b0523a4a032f3cf8b41639. Direct fetching of that commit failed.
> >
> > the submodule transport is not 'file' (it's https) and the direct
> > fetching of the commit actually works:
> >
> > cd wsrep-lib
> > git fetch origin e238c0d240c2557229b0523a4a032f3cf8b41639
> > git checkout e238c0d240c2557229b0523a4a032f3cf8b41639
> > cd ..
> >
> > after that
> >
> > git submodule update --init --recursive
> >
> > succeeds.
>
> It makes sense that after manually fetching the desired tip that the
> submodule update goes through OK, because there is nothing to do (the
> checked-out state matches what's in .gitmodules), so we don't have to
> use any transport mechanism.
Right. I just used it to show that git thinks the submodule was updated
correctly and doesn't try to do anything after that.
> I recently changed the submodule update rules to disallow file-based
> submodules when not directly executed by the user. See a1d4f67c12
> (transport: make `protocol.file.allow` be "user" by default, 2022-07-29)
> for more of the details there.
Yes, I've seen it. That submodule shouldn't be affected:
$ git remote -v
origin https://github.com/codership/wsrep-lib.git (fetch)
origin https://github.com/codership/wsrep-lib.git (push)
so I wouldn't want to circumvent your fix and allow the file transport
that we aren't using.
> But in the short-term, I am curious why we are complaining about needing
> to use the file transport when you claim that the submodule actually
> needs the HTTPS transport.
>
> Are you able to share a copy of your repository, and/or its .gitmodules
> file, and your repository-local .gitconfig, as well? Do you have some
> `url.<base>.insteadOf` value configured elsewhere that would be
> rewriting those paths for you?
No insteadOf. Let me try to...
Okay, here's the bug. In submodule--helper.c, fetch_in_submodule()
function, there're lines:
---------------------------
2211 if (oid) {
2212 char *hex = oid_to_hex(oid);
2213 char *remote = get_default_remote();
2214
2215 strvec_pushl(&cp.args, remote, hex, NULL);
2216 free(remote);
2217 }
---------------------------
this get_default_remote() appears to be getting the default remote name
for the main repository and then uses it to fetch from the submodule.
It happens that my default remote isn't "origin" (long story), it's
"github", but in the submodule it's of course "origin", there's no
"github" remote there. As a result, `git submodule update` runs the
command
git fetch github ${commit_hash}
in the submodule, and that's interpreted as 'file' transport.
To repeat this you need a repository where the default remote isn't
"origin" and a submodule where the commit cannot be fetched by simply
`git fetch` and needs a direct fetch.
Hope this helps.
Regards,
Sergei
next prev parent reply other threads:[~2023-06-22 16:40 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-22 11:09 bug: submodule update fails to fetch Sergei Golubchik
2023-06-22 13:07 ` Taylor Blau
2023-06-22 16:39 ` Sergei Golubchik [this message]
2023-06-23 7:26 ` Jacob Keller
2024-10-01 7:24 ` [PATCH] submodule: correct remote name with fetch Daniel Black
2024-10-01 17:27 ` Junio C Hamano
2024-10-01 17:34 ` Junio C Hamano
2024-10-08 1:49 ` Daniel Black
2024-10-08 1:49 ` [RFC PATCH v2] submodule: correct remote name with fetch Daniel Black
2024-10-08 19:23 ` Junio C Hamano
2024-10-09 3:32 ` [PATCH v3] " Daniel Black
2024-10-09 17:51 ` Junio C Hamano
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=ZJR5SPDj4Wt_gmRO@pweza \
--to=vuvova@gmail.com \
--cc=git@vger.kernel.org \
--cc=me@ttaylorr.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).