All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org,  Justin Tobler <jltobler@gmail.com>,
	 Jeff King <peff@peff.net>
Subject: Re: [PATCH v3 2/5] odb: decouple source path comparisons from `the_repository`
Date: Fri, 21 Aug 2026 08:19:36 -0700	[thread overview]
Message-ID: <xmqqik53qz5j.fsf@gitster.g> (raw)
In-Reply-To: <aof-t_bRzC0u1hHj@pks.im> (Patrick Steinhardt's message of "Fri, 21 Aug 2026 09:31:03 +0200")

Patrick Steinhardt <ps@pks.im> writes:

> I don't feel comfortable removing that mechanism though. There's always
> that one person relying on those weird edge cases.

I do not, either, and more importantly, removing the hashing
mechanism does not help an iota here to deal with case insensitive
filesystems.

>> ... an easy way out may be to tell users "don't
>> spell the pathnames inconsistently" or its equivalent, "do spell
>> them exactly the way readdir() would report on your system", with "if
>> you fail to do so, bad things will happen".  I suspect that the bad
>> thing in this particular case is merely that a search in the
>> alternates is made unnecessarily inefficient due to duplicates, so it
>> may be a reasonable alternative.
>
> Yeah. All of this is really just caused by the fact that there is no
> platform-agnostic way to check whether two directories are the same
> thing. Which is kind of surprising, if you ask me.
>
>> Alternatively, we can even say "your repository cannot span
>> filesystems with different case sensitivities"; I am sure there
>> would be some users affected by such a declaration, but I do not
>> know how much we should care.
>
> I'm hesitant to go there, as that would retroactively introduce
> limitations that could break ...

Yup.  Which means the simplest way out would be to do a "best
effort" case-insensitive match when there is a hint that the
platform might be using a case insensitive filesystem.

And that in turn gives us a direction to solve this part ...

>> > +/*
>> > + * NEEDSWORK: we're using "core.ignoreCase" to deduplicate alternates that
>> > + * _may_ be the same. This requires quite a bit of boilerplate for dubious
>> > ...
>> > +static int odb_source_paths_cmp(struct object_database *o,
>> > +				const char *a, const char *b)
>> > +{
>> > +	if (o->source_paths_icase < 0) {
>> > +		int icase = 0;
>> > +		repo_config_get_bool(o->repo, "core.ignorecase", &icase);
>> 
>> I suspect accessing o->repo should be safe even in the
>> initialization sequence, simply because "o->repo = repo" is done as
>> the first thing in odb_new(), but do we know o->repo->initialized is
>> true in this code path?  Refraining from making that call and
>> assuming a case senstivie comparison may be necessary when o->repo
>> is not yet initialized.

...which is that, since case-insensitivity support is at most best
effort, we do not really care if o->repo is not initialized.  The
code can stay as-is, and if the user spelled the path to a single
alternate object store using two different cases in two places,
causing the code to treat them as two different entities, the effect
is merely an extra search of the "second copy" (which is guaranteed
to find nothing, after a search in the first copy finds no object
they are looking for)s, a minor performance penalty

  reply	other threads:[~2026-08-21 15:19 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
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 [this message]
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=xmqqik53qz5j.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jltobler@gmail.com \
    --cc=peff@peff.net \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.