From 537a071f41259c8631284bef28497280cd33db95 Mon Sep 17 00:00:00 2001 From: Keith Cascio Date: Wed, 14 Jan 2009 16:48:24 -0800 Subject: [PATCH 1/2] test more combinations of ignore-whitespace options to diff There are three flags involved (-w -b and --ignore-space-at-eol) which makes 8 combinations possible in total, but only 3 cases are tested (none, -w alone and -b alone). This adds the other 5 cases. Signed-off-by: Keith Cascio Signed-off-by: Junio C Hamano --- t/t4015-diff-whitespace.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh index b1cbd36d17..0e35b6c711 100755 --- a/t/t4015-diff-whitespace.sh +++ b/t/t4015-diff-whitespace.sh @@ -98,6 +98,12 @@ index d99af23..8b32fb5 100644 EOF git diff -w > out test_expect_success 'another test, with -w' 'test_cmp expect out' +git diff -w -b > out +test_expect_failure 'another test, with -w -b' 'test_cmp expect out' +git diff -w --ignore-space-at-eol > out +test_expect_failure 'another test, with -w --ignore-space-at-eol' 'test_cmp expect out' +git diff -w -b --ignore-space-at-eol > out +test_expect_failure 'another test, with -w -b --ignore-space-at-eol' 'test_cmp expect out' tr 'Q' '\015' << EOF > expect diff --git a/x b/x @@ -116,6 +122,27 @@ index d99af23..8b32fb5 100644 EOF git diff -b > out test_expect_success 'another test, with -b' 'test_cmp expect out' +git diff -b --ignore-space-at-eol > out +test_expect_failure 'another test, with -b --ignore-space-at-eol' 'test_cmp expect out' + +tr 'Q' '\015' << EOF > expect +diff --git a/x b/x +index d99af23..8b32fb5 100644 +--- a/x ++++ b/x +@@ -1,6 +1,6 @@ +-whitespace at beginning +-whitespace change +-whitespace in the middle ++ whitespace at beginning ++whitespace change ++white space in the middle + whitespace at end + unchanged line + CR at endQ +EOF +git diff --ignore-space-at-eol > out +test_expect_success 'another test, with --ignore-space-at-eol' 'test_cmp expect out' test_expect_success 'check mixed spaces and tabs in indent' ' From 6d12acefd5ac0cd688bcc77470bb1d73859cdab1 Mon Sep 17 00:00:00 2001 From: Keith Cascio Date: Mon, 19 Jan 2009 10:03:04 -0800 Subject: [PATCH 2/2] Fix combined use of whitespace ignore options to diff The code used to misbehave when options to ignore certain whitespaces (-w -b and --ignore-at-eol) were combined. Signed-off-by: Keith Cascio Signed-off-by: Junio C Hamano --- t/t4015-diff-whitespace.sh | 8 ++++---- xdiff/xutils.c | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh index 0e35b6c711..5ed18806a7 100755 --- a/t/t4015-diff-whitespace.sh +++ b/t/t4015-diff-whitespace.sh @@ -99,11 +99,11 @@ EOF git diff -w > out test_expect_success 'another test, with -w' 'test_cmp expect out' git diff -w -b > out -test_expect_failure 'another test, with -w -b' 'test_cmp expect out' +test_expect_success 'another test, with -w -b' 'test_cmp expect out' git diff -w --ignore-space-at-eol > out -test_expect_failure 'another test, with -w --ignore-space-at-eol' 'test_cmp expect out' +test_expect_success 'another test, with -w --ignore-space-at-eol' 'test_cmp expect out' git diff -w -b --ignore-space-at-eol > out -test_expect_failure 'another test, with -w -b --ignore-space-at-eol' 'test_cmp expect out' +test_expect_success 'another test, with -w -b --ignore-space-at-eol' 'test_cmp expect out' tr 'Q' '\015' << EOF > expect diff --git a/x b/x @@ -123,7 +123,7 @@ EOF git diff -b > out test_expect_success 'another test, with -b' 'test_cmp expect out' git diff -b --ignore-space-at-eol > out -test_expect_failure 'another test, with -b --ignore-space-at-eol' 'test_cmp expect out' +test_expect_success 'another test, with -b --ignore-space-at-eol' 'test_cmp expect out' tr 'Q' '\015' << EOF > expect diff --git a/x b/x diff --git a/xdiff/xutils.c b/xdiff/xutils.c index d7974d1a3e..04ad468702 100644 --- a/xdiff/xutils.c +++ b/xdiff/xutils.c @@ -245,12 +245,14 @@ static unsigned long xdl_hash_record_with_whitespace(char const **data, while (ptr + 1 < top && isspace(ptr[1]) && ptr[1] != '\n') ptr++; - if (flags & XDF_IGNORE_WHITESPACE_CHANGE + if (flags & XDF_IGNORE_WHITESPACE) + ; /* already handled */ + else if (flags & XDF_IGNORE_WHITESPACE_CHANGE && ptr[1] != '\n') { ha += (ha << 5); ha ^= (unsigned long) ' '; } - if (flags & XDF_IGNORE_WHITESPACE_AT_EOL + else if (flags & XDF_IGNORE_WHITESPACE_AT_EOL && ptr[1] != '\n') { while (ptr2 != ptr + 1) { ha += (ha << 5);