Re: [PATCH][RFC] git on Mac OS and precomposed unicode

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH][RFC] git on Mac OS and precomposed unicode

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:52:44

Torsten Bögershausen [off-list ref] writes:
Implementation:
Two files are added to the "compat" directory, darwin.h and darwin.c.
They implement basically 3 new functions:
darwin_opendir(), darwin_readdir() and darwin_closedir().
I haven't looked at the patch yet but that sounds exactly the right way to
go about this. Nice.
No decomposed file names in a git repository:
In order to prevent that ever a file name in decomposed unicode is entering
the index, a "brute force" attempt is taken:
all arguments into git (technically argv[1]..argv[n]) are converted into
precomposed unicode.
That also sounds sensible, but...
This is done in git.c by calling argv_precompose() for all commands
except "git commit".
... I think it generally is a bad idea to say "all except foo". There may
be a reason why "foo" happens to be special in today's code, but who says
there won't be another command "bar" that shares the same reason with
"foo" to be treated specially? Or depending on the options, perhaps some
codepath of "foo" may not want the special casing and want to go through
the argv_precompose(), no?

After all, "git commit -- pathspec" will have to get the pathspec from the
command line, and match them against the paths in the index, the latter of
which you are keeping in the canonical form, so you would want the argv[]
also be in the same form, and applying your argv_precompose() would be a
sensible way to do so, no?

I would also suspect that the cleanest way to implement it is to replace
the main() entry point (see how compat/mingw.h does this).

Re: [PATCH][RFC] git on Mac OS and precomposed unicode

From: Torsten Bögershausen <hidden>
Date: 2016-06-15 22:52:45

On 08.01.12 03:46, Junio C Hamano wrote:
Torsten Bögershausen [off-list ref] writes:
quoted
Implementation:
Two files are added to the "compat" directory, darwin.h and darwin.c.
They implement basically 3 new functions:
darwin_opendir(), darwin_readdir() and darwin_closedir().
I haven't looked at the patch yet but that sounds exactly the right way to
go about this. Nice.
quoted
No decomposed file names in a git repository:
In order to prevent that ever a file name in decomposed unicode is entering
the index, a "brute force" attempt is taken:
all arguments into git (technically argv[1]..argv[n]) are converted into
precomposed unicode.
That also sounds sensible, but...
quoted
This is done in git.c by calling argv_precompose() for all commands
except "git commit".
... I think it generally is a bad idea to say "all except foo". There may
be a reason why "foo" happens to be special in today's code, but who says
there won't be another command "bar" that shares the same reason with
"foo" to be treated specially? Or depending on the options, perhaps some
codepath of "foo" may not want the special casing and want to go through
the argv_precompose(), no?

After all, "git commit -- pathspec" will have to get the pathspec from the
command line, and match them against the paths in the index, the latter of
which you are keeping in the canonical form, so you would want the argv[]
also be in the same form, and applying your argv_precompose() would be a
sensible way to do so, no?
Thanks Junio for catching this.
I added a new test case as well as fixed the code.
I would also suspect that the cleanest way to implement it is to replace
the main() entry point (see how compat/mingw.h does this).
We only need to that argv conversion in git.c, (and not in daemon.c), so I sticked
to the old model for V1.
I send a new patch soon
/Torsten
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help