git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Bug: Changing folder case with `git mv` crashes on case-insensitive file system

From
Torsten Bögershausen <tboegi@web.de>
Date
May 6, 2021, 04:34 UTC
Message-ID
<20210506043429.zqgzxjrj643avrns@tb-raspi4>
In-Reply-To
<xmqqtuni58ra.fsf@gitster.g>
On Wed, May 05, 2021 at 09:23:05AM +0900, Junio C Hamano wrote:
Show 17 quoted lines
> Torsten Bögershausen <tboegi@web.de> writes:
>
> > To my undestanding we try to rename
> > foo/ into FOO/.
> > But because FOO/ already "exists" as directory,
> > Git tries to move foo/ into FOO/foo, which fails.
> >
> > And no, the problem is probably not restricted to MacOs,
> > Windows and all case-insenstive file systems should show
> > the same, but I haven't tested yet, so it's more a suspicion.
> >
> > The following diff allows to move foo/ into FOO/
> > If someone wants to make a patch out if, that would be good.
>
> Is strcasecmp() sufficient for macOS whose filesystem has not just
> case insensitivity but UTF-8 normalization issues?
>
Strictly speaking: no.

The Git code doesn't handle UTF-8 uppper/lower case at all: git mv bar.txt BAR.TXT works because strcasecmp() is catching it.

git mv bär.txt BÄR.TXT needs the long way: git mv bär.txt baer.txt && git mv baer.txt BÄR.TXT

We have been restricting the case-change-is-allowed to ASCII filenames all the time. There is no information, which code points map onto each other in Git, since this is all file system dependent. NTFS has one way, HFS+, APFS another, VFAT a third one, and if I expose ext4 via SAMBA we probably have another one. Not mentioniong that ext4 can be use case-insensitve on later Linux kernels, which sticks to unicode. Or Git repos running on machines using ISO-8859-1, those should be rare these days.

That said, people are renaming files in ASCII only and are happy, and in that sense renaming directories in ASCII can be supported without major hassle.

And the inode approach mentioned as well: This could go on top of strcasecmp() to cover non-ASCII filenames or other oddities, if someone implements it.

Previous: brian m. carlsonNext: Mark Amery
Message 10 of 14 in “Bug: Changing folder case with `git mv` crashes on case-insensitive file system”
  1. Mark AmeryMay 3, 2021
  2. brian m. carlsonMay 3, 2021
  3. Junio C HamanoMay 4, 2021
  4. brian m. carlsonMay 4, 2021
  5. Johannes SchindelinMay 5, 2021
  6. Junio C HamanoMay 6, 2021
  7. Torsten BögershausenMay 4, 2021
  8. Junio C HamanoMay 5, 2021
  9. brian m. carlsonMay 5, 2021
  10. Torsten BögershausenMay 6, 2021
  11. Mark AmeryMay 6, 2021
  12. Bagas SanjayaMay 6, 2021
  13. Torsten BögershausenMay 6, 2021
  14. Junio C HamanoMay 6, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.