Git development
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org, Justin Tobler <jltobler@gmail.com>
Subject: Re: [PATCH v2 1/4] odb: decouple source path comparisons from `the_repository`
Date: Mon, 17 Aug 2026 03:28:40 -0400	[thread overview]
Message-ID: <20260817072840.GB690018@coredump.intra.peff.net> (raw)
In-Reply-To: <aoKeeQMps50rjhWi@pks.im>

On Mon, Aug 17, 2026 at 07:39:05AM +0200, Patrick Steinhardt wrote:

> I also had the feeling that case insensitivity is quite a bit lacking,
> too. What we're really after is whether two directories are actually the
> exact same path. And whether the path is case-insensitive is only one
> part of that equation, so it's an imperfect metric by itself already.
> 
> Ideally, we should probably use realpath(3p) to at least also resolve
> symlinks. Unfortunately, it's not guaranteed that this function also
> knows to canonicalize casing.

Yeah, exactly. I don't think we have a completely robust way of doing
that check.

> > So I kind of wonder if we could just do away with considering case
> > insensitivity here at all. We'd err on the side of correctness in the
> > ambiguous cases, and this code complexity can just go away.
> 
> You will of course be able to craft edge cases where that would be a
> significant regression. But if your alternates file looks like this you
> may be holding it wrong:
> 
>     /path/to/alternate
>     /PATH/TO/ALTERNATE
>     /pAtH/tO/aLtErNaTe
>     /PaTh/To/AlTeRnAtE

Agreed. The more likely case to me is that repo "A" points to "B" and
"C", then "B" also points to "c" (lowercase). Or you can imagine other
tree structures that converge.

I don't think you could ever get there with standard Git commands,
though. We only ever insert a single alternate via "clone --shared", so
they always form a chain. To get multiple entries I think you'd have to
create the alternates file manually.

  You could also have a chain that forms a loop, but I think you are
  probably beyond screwed at that point anyway. And also probably
  impossible to do with "clone --shared", as the parent repo must
  already exist.

So yeah, I'd be highly surprised if anybody outside of specialized
alternates-tweaking scripts (like the ones that forges use) would ever
construct a situation where duplicates even mattered, let alone their
case. In the case of GitHub's scripts, they were always boring and
one-level anyway (forks point to a shared repo).

IIRC talking to kernel.org folks long ago, they had some kind of tree
structure that matched the filesystem (so foo/bar/baz.git borrowed from
foo/bar.git, which borrowed from foo.git). I don't know if it was a
strict tree, though, or if that system ever even saw production use.

> Hm. Weren't there filesystems where `st_ino` and `st_dev` aren't set at
> all? I think that's the case on Windows, which is unfortunately also the
> one where we see case insensitive filesystems by default. So that makes
> it way less effective, as it only works on systems where we typically
> aren't case-insensitive in the first place (except macOS maybe).
> 
> So if we want to go down this path I'm inclined to just unconditionally
> use case sensitive matching and not introduce any secondary machinery.

Yes, that's my preference, too.

-Peff

  parent reply	other threads:[~2026-08-17  7:28 UTC|newest]

Thread overview: 47+ 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
2026-08-17  5:39       ` Patrick Steinhardt
2026-08-17  7:16         ` Patrick Steinhardt
2026-08-17  7:36           ` Jeff King
2026-08-17  9:42             ` Patrick Steinhardt
2026-08-17 17:47               ` Jeff King
2026-08-17  7:28         ` Jeff King [this message]
2026-08-14 17:21     ` Jeff King
2026-08-17  5:36       ` Patrick Steinhardt
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
2026-08-17 11:09 ` [PATCH v3 0/5] " Patrick Steinhardt
2026-08-17 11:09   ` [PATCH v3 1/5] setup: create ref and object databases after config is written Patrick Steinhardt
2026-08-20  9:09     ` Karthik Nayak
2026-08-17 11:09   ` [PATCH v3 2/5] odb: decouple source path comparisons from `the_repository` Patrick Steinhardt
2026-08-20 15:59     ` Junio C Hamano
2026-08-21  7:31       ` Patrick Steinhardt
2026-08-21 15:19         ` Junio C Hamano
2026-08-17 11:09   ` [PATCH v3 3/5] odb: eagerly initialize alternates Patrick Steinhardt
2026-08-17 11:09   ` [PATCH v3 4/5] odb: drop `loaded_alternates` field Patrick Steinhardt
2026-08-17 11:09   ` [PATCH v3 5/5] odb: drop `alternates_db` field Patrick Steinhardt
2026-08-20  9:11   ` [PATCH v3 0/5] odb: eagerly load alternates Karthik Nayak

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=20260817072840.GB690018@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --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