Skip to content

Commit

Permalink
Fix "git log --diff-filter" bug
Browse files Browse the repository at this point in the history
In commit b7bb760 (Fix revision
log diff setup, avoid unnecessary diff generation) an optimization was
made to avoid unnecessary diff generation.  This was partly fixed in
99516e3 (Fix embarrassing "git log
--follow" bug).  The '--diff-filter' option also needs the diff machinery
in action.

Signed-off-by: Arjen Laarhoven <arjen@yaph.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Arjen Laarhoven authored and Junio C Hamano committed Dec 26, 2007
1 parent c8deb5a commit 0faf2da
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 2 deletions.
6 changes: 4 additions & 2 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -1290,8 +1290,10 @@ 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 and rename following needs diffs */
if (revs->diffopt.pickaxe || DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES))
/* Pickaxe, diff-filter and rename following need diffs */
if (revs->diffopt.pickaxe ||
revs->diffopt.filter ||
DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES))
revs->diff = 1;

if (revs->topo_order)
Expand Down
74 changes: 74 additions & 0 deletions t/t4202-log.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/sh

test_description='git log'

. ./test-lib.sh

test_expect_success setup '
echo one >one &&
git add one &&
test_tick &&
git commit -m initial &&
echo ichi >one &&
git add one &&
test_tick &&
git commit -m second &&
mkdir a &&
echo ni >a/two &&
git add a/two &&
test_tick &&
git commit -m third &&
echo san >a/three &&
git add a/three &&
test_tick &&
git commit -m fourth &&
git rm a/three &&
test_tick &&
git commit -m fifth
'

test_expect_success 'diff-filter=A' '
actual=$(git log --pretty="format:%s" --diff-filter=A HEAD) &&
expect=$(echo fourth ; echo third ; echo initial) &&
test "$actual" = "$expect" || {
echo Oops
echo "Actual: $actual"
false
}
'

test_expect_success 'diff-filter=M' '
actual=$(git log --pretty="format:%s" --diff-filter=M HEAD) &&
expect=$(echo second) &&
test "$actual" = "$expect" || {
echo Oops
echo "Actual: $actual"
false
}
'

test_expect_success 'diff-filter=D' '
actual=$(git log --pretty="format:%s" --diff-filter=D HEAD) &&
expect=$(echo fifth) &&
test "$actual" = "$expect" || {
echo Oops
echo "Actual: $actual"
false
}
'



test_done

0 comments on commit 0faf2da

Please sign in to comment.