Re: [PATCH/RFC][GSoC] make "git diff --no-index $directory $file" DWIM better.
- From
t.gummerer@gmail.com <t.gummerer@gmail.com>
- Date
- Mar 15, 2015, 18:13 UTC
- Message-ID
- <20150315181322.GC17591@hank>
- In-Reply-To
- <CAHLaBNLQ8-JzEBjypvJDDzhW8SwfzujuOknC_QWar+cL18cR3A@mail.gmail.com>
[re-added cc to the list]
On 03/15, Yurii Shevtsov wrote:
Show 32 quoted lines
> 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.