[re-added cc to the list] On 03/15, Yurii Shevtsov wrote: > Hi, and thank for your reply > > >> 1 files changed, 19 insertions(+), 2 deletions(-) > >> > >> diff --git a/diff-no-index.c b/diff-no-index.c > >> index 265709b..4e71b36 100644 > >> --- a/diff-no-index.c > >> +++ b/diff-no-index.c > >> @@ -97,8 +97,25 @@ static int queue_diff(struct diff_options *o, > >> if (get_mode(name1, &mode1) || get_mode(name2, &mode2)) > >> return -1; > >> > >> - if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2)) > >> - return error("file/directory conflict: %s, %s", name1, name2); > >> + if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2)) { > >> + struct strbuf dirnfile; > >> + const char *dir, *file; > >> + char *filename; > >> + int ret = 0; > >> + > >> + dir = S_ISDIR(mode1) ? name1 : name2; > >> + file = (dir == name1) ? name2 : name1; > > > > This makes git diff --no-index $directory $file the same as > > git diff --no-index $file $directory. Shouldn't these commands give > > different results? (See the behaviour of diff in this case, and > > compare it to the behaviour you introduced here) > > I really checked behavior of usual diff. And swapping arguments > doesn't affect result. At first I had doubts about task formulation, > so I asked about it and got the answer: > gmane.comp.version-control.git/265479 Am I misunderstood it again? Using the same example as in that thread, I get the following output: tommy at hank in work[1] $ diff -u git junk/diff.h --- git/diff.h 2014-12-26 21:00:20.690774933 +0100 +++ junk/diff.h 2015-03-15 18:02:03.441049918 +0100 @@ -357,3 +357,4 @@ extern void setup_diff_pager(struct diff_options *); #endif /* DIFF_H */ +hello tommy at hank in work $ diff -u junk/diff.h git --- junk/diff.h 2015-03-15 18:02:03.441049918 +0100 +++ git/diff.h 2014-12-26 21:00:20.690774933 +0100 @@ -357,4 +357,3 @@ extern void setup_diff_pager(struct diff_options *); #endif /* DIFF_H */ -hello Notice the +hello vs. -hello in the last line off the diff. Git with your patch on the other hand gives me +hello in both cases. tommy at hank in work[1] $ g diff --no-index git junk/diff.h diff --git a/git/diff.h b/junk/diff.h index b4a624d..81671dd 100644 --- a/git/diff.h +++ b/junk/diff.h @@ -357,3 +357,4 @@ extern int print_stat_summary(FILE *fp, int files, extern void setup_diff_pager(struct diff_options *); #endif /* DIFF_H */ +hello tommy at hank in work[1] $ g diff --no-index junk/diff.h git diff --git a/git/diff.h b/junk/diff.h index b4a624d..81671dd 100644 --- a/git/diff.h +++ b/junk/diff.h @@ -357,3 +357,4 @@ extern int print_stat_summary(FILE *fp, int files, extern void setup_diff_pager(struct diff_options *); #endif /* DIFF_H */ +hello So while I think the behaviour with git diff --no-index $directory $file is correct (minus the comments by Matthieu), git diff --no-index $file $directory is not, I think. -- 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