diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-10-17 13:29:19 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-10-17 13:29:19 +0900 |
commit | 91ccfb85176fbe2ed416751ff7884cdaf61311cb (patch) | |
tree | 751cf5f7235e9a2eb10521a3224178500b01472a | |
parent | d1114d87c73c78a936975bef5f15e2cde639336d (diff) | |
parent | fa5ba2c1dd0ce1bd060f423e7b1eb39d06fcd2cd (diff) | |
download | git-91ccfb85176fbe2ed416751ff7884cdaf61311cb.tar.gz git-91ccfb85176fbe2ed416751ff7884cdaf61311cb.tar.xz |
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
-rw-r--r-- | diff.c | 28 | ||||
-rwxr-xr-x | t/t4015-diff-whitespace.sh | 9 |
2 files changed, 24 insertions, 13 deletions
@@ -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); diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh index bd0f75d9f..87083f728 100755 --- a/t/t4015-diff-whitespace.sh +++ b/t/t4015-diff-whitespace.sh @@ -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 |