Alexander Rinass <alex@xxxxxxxxxxxx> writes: > File paths containing decomposed unicode chars passed to diff > command are not converted to precomposed unicode form. > > As a result, no diff is displayed when feeding such a file path to the > diff command. > > Opposite to most builtin commands, the diff builtin is missing the > parse_options call, which internally runs arguments through the > precompose_argv call, which ensures all arguments are in precomposed > unicode form. > > Fix the problem by adding a precompose_argv call directly, as a call to > parse_options would require additional work to call it. > > Also applies to diff-index, diff-files and diff-tree. Thanks. The log message talks about "such a file path", but precompose_argv() applies indiscriminately on any command line arguments, so things like -G<string> would also get the same treatment, which I think is what most users would want). Will queue. > Signed-off-by: Alexander Rinass <alex@xxxxxxxxxxxx> > Thanks-to: Torsten Bögershausen <tboegi@xxxxxx> > Thanks-to: Junio C Hamano <gitster@xxxxxxxxx> > --- > builtin/diff-files.c | 1 + > builtin/diff-index.c | 1 + > builtin/diff-tree.c | 2 ++ > builtin/diff.c | 1 + > t/t3910-mac-os-precompose.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ > 5 files changed, 47 insertions(+) > > diff --git a/builtin/diff-files.c b/builtin/diff-files.c > index 8ed2eb8..15c61fd 100644 > --- a/builtin/diff-files.c > +++ b/builtin/diff-files.c > @@ -24,6 +24,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix) > gitmodules_config(); > git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ > rev.abbrev = 0; > + precompose_argv(argc, argv); > > argc = setup_revisions(argc, argv, &rev, NULL); > while (1 < argc && argv[1][0] == '-') { > diff --git a/builtin/diff-index.c b/builtin/diff-index.c > index d979824..1af373d 100644 > --- a/builtin/diff-index.c > +++ b/builtin/diff-index.c > @@ -21,6 +21,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) > gitmodules_config(); > git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ > rev.abbrev = 0; > + precompose_argv(argc, argv); > > argc = setup_revisions(argc, argv, &rev, NULL); > for (i = 1; i < argc; i++) { > diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c > index 2a12b81..806dd7a 100644 > --- a/builtin/diff-tree.c > +++ b/builtin/diff-tree.c > @@ -114,6 +114,8 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix) > opt->disable_stdin = 1; > memset(&s_r_opt, 0, sizeof(s_r_opt)); > s_r_opt.tweak = diff_tree_tweak_rev; > + > + precompose_argv(argc, argv); > argc = setup_revisions(argc, argv, opt, &s_r_opt); > > while (--argc > 0) { > diff --git a/builtin/diff.c b/builtin/diff.c > index 52c98a9..d6b8f98 100644 > --- a/builtin/diff.c > +++ b/builtin/diff.c > @@ -319,6 +319,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) > if (!no_index) > gitmodules_config(); > git_config(git_diff_ui_config, NULL); > + precompose_argv(argc, argv); > > init_revisions(&rev, prefix); > > diff --git a/t/t3910-mac-os-precompose.sh b/t/t3910-mac-os-precompose.sh > index 8319356..26dd5b7 100755 > --- a/t/t3910-mac-os-precompose.sh > +++ b/t/t3910-mac-os-precompose.sh > @@ -49,12 +49,54 @@ test_expect_success "setup" ' > test_expect_success "setup case mac" ' > git checkout -b mac_os > ' > +# This will test nfd2nfc in git diff > +test_expect_success "git diff f.Adiar" ' > + touch f.$Adiarnfc && > + git add f.$Adiarnfc && > + echo f.Adiarnfc >f.$Adiarnfc && > + git diff f.$Adiarnfd >expect && > + git diff f.$Adiarnfc >actual && > + test_cmp expect actual && > + git reset HEAD f.Adiarnfc && > + rm f.$Adiarnfc expect actual > +' > +# This will test nfd2nfc in git diff-files > +test_expect_success "git diff-files f.Adiar" ' > + touch f.$Adiarnfc && > + git add f.$Adiarnfc && > + echo f.Adiarnfc >f.$Adiarnfc && > + git diff-files f.$Adiarnfd >expect && > + git diff-files f.$Adiarnfc >actual && > + test_cmp expect actual && > + git reset HEAD f.Adiarnfc && > + rm f.$Adiarnfc expect actual > +' > +# This will test nfd2nfc in git diff-index > +test_expect_success "git diff-index f.Adiar" ' > + touch f.$Adiarnfc && > + git add f.$Adiarnfc && > + echo f.Adiarnfc >f.$Adiarnfc && > + git diff-index HEAD f.$Adiarnfd >expect && > + git diff-index HEAD f.$Adiarnfc >actual && > + test_cmp expect actual && > + git reset HEAD f.Adiarnfc && > + rm f.$Adiarnfc expect actual > +' > # This will test nfd2nfc in readdir() > test_expect_success "add file Adiarnfc" ' > echo f.Adiarnfc >f.$Adiarnfc && > git add f.$Adiarnfc && > git commit -m "add f.$Adiarnfc" > ' > +# This will test nfd2nfc in git diff-tree > +test_expect_success "git diff-tree f.Adiar" ' > + echo f.Adiarnfc >>f.$Adiarnfc && > + git diff-tree HEAD f.$Adiarnfd >expect && > + git diff-tree HEAD f.$Adiarnfc >actual && > + test_cmp expect actual && > + git checkout f.$Adiarnfc && > + rm expect actual > +' > # This will test nfd2nfc in git stage() > test_expect_success "stage file d.Adiarnfd/f.Adiarnfd" ' > mkdir d.$Adiarnfd && -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html