Thread (1 message) 1 message, 1 author, 2025-07-02

Re: Re [bug] pull --prune could not delete references due to lock file already exists error

From: Junio C Hamano <hidden>
Date: 2025-07-02 15:38:00

Chris Torek [off-list ref] writes:
On Mon, Jun 30, 2025 at 7:21 AM brian m. carlson
[off-list ref] wrote:
[regarding]
quoted
quoted
+                             if (ignore_case && prev && !strcasecmp(ref->next, prev))
This won't work in the general case, since the two refs that match case
insensitively aren't guaranteed to be adjacent.
Also worth mention: it's not just case-folding that matters.

On OS X (Macs), path names get "normalized" so that the names

   s c h combining-umlaut o n

and

   s c h umlaut-o n

refer to the *same* file or directory. On a typical Linux/Unix FS, they differ.

(I don't know what Windows does!)

So, if you have a "folder-full" of "pretty" German refnames, some
spelled one way and some another, well...

(It's not clear to me what, if anything, Git should attempt to do here.)
The system supplied argv[] is fed to the precompose_argv_prefix()
helper in compat/precompose_utf8.c; opendir/readdir/closedir are
also wrapped with similar NFD/NFC normalization (really, UTF-8-MAC
vs UTF-8) helpers defined in the same file.  So the path you read
(via the opendir/readdir like dir.c does) from the system, or the
path you are fed from the command line (via argv[]), are normalized
before code in Git above the compat layer even sees them.  The path
recoreded in various mechanisms in Git like the index and the tree
objects are all normalized.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help