Merge branch 'sb/diff-color-move'

A recently added "--color-moved" feature of "diff" fell into
infinite loop when ignoring whitespace changes, which has been
fixed.

* sb/diff-color-move:
  diff: fix infinite loop with --color-moved --ignore-space-change
This commit is contained in:
Junio C Hamano 2017-10-17 13:29:19 +09:00
commit 91ccfb8517
2 changed files with 24 additions and 13 deletions

28
diff.c
View file

@ -712,20 +712,22 @@ static int next_byte(const char **cp, const char **endp,
if (*cp > *endp)
return -1;
if (DIFF_XDL_TST(diffopt, IGNORE_WHITESPACE_CHANGE)) {
while (*cp < *endp && isspace(**cp))
(*cp)++;
/*
* After skipping a couple of whitespaces, we still have to
* account for one space.
*/
return (int)' ';
}
if (isspace(**cp)) {
if (DIFF_XDL_TST(diffopt, IGNORE_WHITESPACE_CHANGE)) {
while (*cp < *endp && isspace(**cp))
(*cp)++;
/*
* After skipping a couple of whitespaces,
* we still have to account for one space.
*/
return (int)' ';
}
if (DIFF_XDL_TST(diffopt, IGNORE_WHITESPACE)) {
while (*cp < *endp && isspace(**cp))
(*cp)++;
/* return the first non-ws character via the usual below */
if (DIFF_XDL_TST(diffopt, IGNORE_WHITESPACE)) {
while (*cp < *endp && isspace(**cp))
(*cp)++;
/* return the first non-ws character via the usual below */
}
}
retval = (unsigned char)(**cp);

View file

@ -1530,4 +1530,13 @@ test_expect_success 'move detection with submodules' '
test_cmp expect decoded_actual
'
test_expect_success 'move detection with whitespace changes' '
test_when_finished "git reset --hard" &&
test_seq 10 >test &&
git add test &&
sed s/3/42/ <test >test.tmp &&
mv test.tmp test &&
git -c diff.colormoved diff --ignore-space-change -- test
'
test_done