git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Jeff King <peff@peff.net>
Cc: Joe Drew <joe.drew@indexexchange.com>,
	"git@vger.kernel.org" <git@vger.kernel.org>,
	Karthik Nayak <karthik.188@gmail.com>
Subject: Re: "lock file exists" when fetching in bare clone of repository
Date: Thu, 21 Aug 2025 12:09:45 +0200	[thread overview]
Message-ID: <aKbwabLZiWasYoBC@pks.im> (raw)
In-Reply-To: <20250821072706.GA2390046@coredump.intra.peff.net>

On Thu, Aug 21, 2025 at 03:27:06AM -0400, Jeff King wrote:
> On Thu, Aug 21, 2025 at 09:15:47AM +0200, Patrick Steinhardt wrote:
> 
> > > > This error _does not_ happen in the Apple-supplied version of git:
> > > > `git version 2.39.5 (Apple Git-154)`, but does in 2.51.0, which I
> > > > installed with homebrew. (If this is a packaging error, I'll happily
> > > > report to homebrew.)
> > > 
> > > That is definitely weird, and not something I'd expect if it's just a
> > > case collision. Is it possible for you to build Git from source? If so,
> > > and the problem happens with your build of 2.51.0 but not v2.39.5, it
> > > would be very enlightening to see the results of "git bisect". We can
> > > provide more guidance if you need with that process.
> > 
> > Curious indeed. Another relevant part could be the new batched mode that
> > we have recently introduced in git-fetch(1). Previously we would've
> > updated refs one by one, and potentially that led to us writing the same
> > ref multiple times due to case-insensitivity? The result would be quite
> > broken in that case, but at least the fetch would've finished. Does make
> > me wonder though what subsequent fetches did, and whether we always tend
> > to flip-flop the value of such a ref.
> 
> Ah, good catch. That would explain the behavior change perfectly. My money is
> on a case collision, then. :)
> 
> > But with batched transactions that's not possible anymore, as we would
> > indeed try to lock the same ref twice. Assuming that this really is the
> > case, I wonder whether we should detect this case, tell the user that
> > it's impossible to store all refs on their system, and then continue
> > regardless while ejecting that specific ref from the transaction.
> 
> Maybe it is too optimistic to think that they will just start using
> reftable in Git 3.0, and we can avoid extra code to detect this?

Probably, yeah. I also think it shouldn't be too involved to have the
logic in Git. We can mark transactions as allowing for failures now, so
in the best case we'd just do that and then check whether we have any
errors.

We could also think about generating a hint that tells the user exactly
what's going on. E.g. something like this:

    You're on a case-insensitive filesystem, and the remote you are
    trying to fetch from has references that only differ in casing. It
    is impossible to store such references with the "files" backend. You
    can either accept this as-is, in which case you won't be able to
    store all remote references on disk. Or you can alternatively
    migrate your repository to use the "reftable" backend with the
    following command:

        git refs migrate --ref-format=reftable

    Please keep in mind that not all implementations of Git support this
    new format yet. So if you use tools other than Git to access this
    repository it may not be an option to migrate to reftables.

The last part is what I'm working on right now. libgit2 is fully
functional now, but what is still lacking is reviews.

Patrick

  reply	other threads:[~2025-08-21 10:09 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-20 20:54 "lock file exists" when fetching in bare clone of repository Joe Drew
2025-08-20 21:33 ` Jeff King
2025-08-21  7:15   ` Patrick Steinhardt
2025-08-21  7:27     ` Jeff King
2025-08-21 10:09       ` Patrick Steinhardt [this message]
2025-08-21 16:05         ` Junio C Hamano
2025-08-22  6:13           ` Patrick Steinhardt
2025-08-22  8:01             ` Karthik Nayak
2025-08-22 17:47               ` Junio C Hamano
2025-08-28 13:51                 ` Karthik Nayak
2025-08-28 16:16                   ` Junio C Hamano
2025-09-01 18:17                     ` Karthik Nayak
2025-08-21 15:47       ` Junio C Hamano
2025-08-22 13:28   ` Joe Drew
2025-08-26 11:19   ` Jeff King
2025-09-02 10:55     ` Patrick Steinhardt

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=aKbwabLZiWasYoBC@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=joe.drew@indexexchange.com \
    --cc=karthik.188@gmail.com \
    --cc=peff@peff.net \
    /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).