Browse Source

Fix "git log --diff-filter" bug

In commit b7bb760d5e (Fix revision
log diff setup, avoid unnecessary diff generation) an optimization was
made to avoid unnecessary diff generation.  This was partly fixed in
99516e35d0 (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>
maint
Arjen Laarhoven 17 years ago committed by Junio C Hamano
parent
commit
0faf2da7e5
  1. 6
      revision.c
  2. 74
      t/t4202-log.sh

6
revision.c

@ -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) if (revs->diffopt.output_format & ~DIFF_FORMAT_NO_OUTPUT)
revs->diff = 1; revs->diff = 1;


/* Pickaxe and rename following needs diffs */ /* Pickaxe, diff-filter and rename following need diffs */
if (revs->diffopt.pickaxe || DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES)) if (revs->diffopt.pickaxe ||
revs->diffopt.filter ||
DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES))
revs->diff = 1; revs->diff = 1;


if (revs->topo_order) if (revs->topo_order)

74
t/t4202-log.sh

@ -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
Loading…
Cancel
Save