On Tue, Apr 30, 2024 at 12:27:02PM +0900, Jun T wrote: > On macOS, 'git ls-files path' does not work (gives an error) > if the absolute 'path' contains characters in NFD (decomposed). > I guess this is a (minor) bug of git. > > [1] How to reproduce the problem > > On macOS, git 2.39.3 or 2.45.0.219.gb9fe23f5ca(next branch), > file system can be APFS or HFS. > > with zsh or bash: > % cd /somewhere # some safe place, /tmp or ~/tmp etc. > % mkdir $'u\xcc\x88' # ü in NFD > % cd ü # or cd $'u\xcc\x88' or cd $'\xc3\xbc' > % git init > % git ls-files $'/somewhere/u\xcc\x88' # NFD > fatal: /somewhere/ü: '/somewhere/ü' is outside repository at '/somewhere/ü' > % git ls-files $'/somewhere/\xc3\xbc' # NFC > (the same error as above) > > In the 'fatal:' error message, there are three ü; > the 1st and 2nd are in NFC, the 3rd is in NFD. > > [2] Some analysis > > The path on the command line $'/somewhere/u\xcc\x88' > is converted to NFC by precompose_argv_prefix(), > called at git.c:451 in run_builtin(). > > But get_git_work_tree() (called at setup.c:50, in > abspath_part_inside_repo()) returns the work_tree in NFD, > and comparing it with the path in NFC (setup.c:92) fails. > > I'm not familiar with git internals, but maybe > get_git_work_tree() should return NFC (on macoS)? > > -- > Jun (Jun-ichi Takimoto) Thanks for an excellent bug report and analyzes. I am familar with the NFC/NFD stuff, but not with get_git_work_tree(), at least not yet. If you have a suggestion for a patch, would you like to share it ? A 'git diff' may be a good start, I am happy to review things. /Torsten