From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Patrick Steinhardt <ps@pks.im>,
git@vger.kernel.org, Justin Tobler <jltobler@gmail.com>
Subject: Re: [PATCH v2 1/4] odb: decouple source path comparisons from `the_repository`
Date: Fri, 14 Aug 2026 16:36:24 -0400 [thread overview]
Message-ID: <20260814203624.GC2575854@coredump.intra.peff.net> (raw)
In-Reply-To: <xmqqpkzkmsmo.fsf@gitster.g>
On Fri, Aug 14, 2026 at 12:03:43PM -0700, Junio C Hamano wrote:
> Jeff King <peff@peff.net> writes:
>
> > How bad is a duplicate alternate? It's a minor performance issue, I'd
> > think. We would add its packs to the list (though hardly ever look
> > through them, as the "first" copy would satisfy most requests, and the
> > unused second copies end up at the back of the MRU list). You'd only pay
> > the extra lookup cost for an object which we fail to find entirely,
> > which is rare-ish (mostly speculative lookups for fetches).
>
> There may be a future application to be written to go through list
> of alternates---enumerate all objects that exist in the first one,
> and then remove them as duplicates to other alternates. Oops, there
> was a duplicated entry and we ended up removing the objects from the
> first one registered under a different spelling.
Yeah, that would be dangerous. You _might_ even be able to trigger that
now with an object directory that points to itself as an alternate, and
then doing "git repack -adl" or similar. I don't recall offhand whether
we normalize the names or if we'd be fooled by symlinks. Or for that
matter if we are even careful about comparing alternates to the main odb
directory.
I hate to be cavalier about conditions that could cause data loss, but
at the same time...it kind of feels like you'd have to be _trying_ to
shoot yourself in the foot to create such a situation.
> > Alternatively, I think we could probably make the check more thorough in
> > a similar way. Always consider a pair of case-insensitive matches as
> > possible duplicates, and then for each possible duplicate use stat() to
> > check their st_dev and st_ino values. That keeps things cheap for normal
> > cases, and we pay only the stat() before de-duping. It's correct and
> > doesn't rely on the repo, though it is a bit more somewhat complicated
> > code.
>
> Hmph, I prefer not to trust st_dev and st_ino on platforms where
> case insensitivity can possibly become an issue, though.
Yeah, I would prefer not to go down that road, either. There are a lot
of complexity and portability headaches. I offered it mostly as a "you
probably _could_ do this super-carefully" option, but my take is that we
don't need to be super-careful.
> > [1] Even on a single filesystem I think case-sensitivity check is not
> > completely sufficient either. We know that filesystems do more
> > complicated one-way transformations than just case folding, like
> > unicode normalization or even removing some funky code points.
> > We'd miss those "equivalent" spellings.
>
> macOS?
Naturally. :)
-Peff
next prev parent reply other threads:[~2026-08-14 20:36 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 13:33 [PATCH 0/4] odb: eagerly load alternates Patrick Steinhardt
2026-08-10 13:33 ` [PATCH 1/4] odb: decouple source path comparisons from `the_repository` Patrick Steinhardt
2026-08-11 22:04 ` Justin Tobler
2026-08-12 5:39 ` Patrick Steinhardt
2026-08-10 13:33 ` [PATCH 2/4] odb: eagerly initialize alternates Patrick Steinhardt
2026-08-11 22:15 ` Justin Tobler
2026-08-12 5:39 ` Patrick Steinhardt
2026-08-10 13:33 ` [PATCH 3/4] odb: drop `loaded_alternates` field Patrick Steinhardt
2026-08-11 22:22 ` Justin Tobler
2026-08-10 13:33 ` [PATCH 4/4] odb: drop `alternates_db` field Patrick Steinhardt
2026-08-11 22:31 ` Justin Tobler
2026-08-12 5:39 ` Patrick Steinhardt
2026-08-12 9:13 ` [PATCH v2 0/4] odb: eagerly load alternates Patrick Steinhardt
2026-08-12 9:13 ` [PATCH v2 1/4] odb: decouple source path comparisons from `the_repository` Patrick Steinhardt
2026-08-13 12:23 ` Karthik Nayak
2026-08-13 13:17 ` Patrick Steinhardt
2026-08-14 10:21 ` Karthik Nayak
2026-08-14 17:17 ` Jeff King
2026-08-14 19:03 ` Junio C Hamano
2026-08-14 20:36 ` Jeff King [this message]
2026-08-14 17:21 ` Jeff King
2026-08-12 9:13 ` [PATCH v2 2/4] odb: eagerly initialize alternates Patrick Steinhardt
2026-08-12 9:13 ` [PATCH v2 3/4] odb: drop `loaded_alternates` field Patrick Steinhardt
2026-08-13 12:25 ` Karthik Nayak
2026-08-12 9:14 ` [PATCH v2 4/4] odb: drop `alternates_db` field Patrick Steinhardt
2026-08-12 15:38 ` [PATCH v2 0/4] odb: eagerly load alternates Junio C Hamano
2026-08-13 8:56 ` Patrick Steinhardt
2026-08-13 12:28 ` Karthik Nayak
2026-08-13 17:09 ` Justin Tobler
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=20260814203624.GC2575854@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jltobler@gmail.com \
--cc=ps@pks.im \
/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