Code

Fix embarrassing "git log --follow" bug
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 8 Oct 2007 20:42:41 +0000 (13:42 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Tue, 16 Oct 2007 00:15:58 +0000 (20:15 -0400)
It turns out that I completely broke "git log --follow" with my recent
patch to revision.c ("Fix revision log diff setup, avoid unnecessary diff
generation", commit b7bb760d5ed4881422673d32f869d140221d3564).

Why? Because --follow obviously requires the diff machinery to function,
exactly the same way pickaxe does.

So everybody is away right now, but considering that nobody even noticed
this bug, I don't think it matters. But for the record, here's the trivial
one-liner fix (well, two, since I also fixed the comment).

Because of the nature of the bug, if you ask for patches when following
(which is one of the things I normally do), the bug is hidden, because
then the request for diff output will automatically also enable the diffs
themselves.

So while "git log --follow <filename>" didn't work, adding a "-p"
magically made it work again even without this fix.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
revision.c

index 658471385cfaa2480ee78b19fe38fc51d9b51ab2..48756b5d4466d06123922573e4330fc4344c1dcb 100644 (file)
@@ -1256,8 +1256,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
        if (revs->diffopt.output_format & ~DIFF_FORMAT_NO_OUTPUT)
                revs->diff = 1;
 
-       /* Pickaxe needs diffs */
-       if (revs->diffopt.pickaxe)
+       /* Pickaxe and rename following needs diffs */
+       if (revs->diffopt.pickaxe || revs->diffopt.follow_renames)
                revs->diff = 1;
 
        if (revs->topo_order)