(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"Test special whitespace in diff engine.\n"> <"\n">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/diff-lib.sh)}) (C {(test_expect_success)} {(DQ ("Ray Lehtiniemi's example"))} { (SQ <"\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tdo {\n"> <"\t nothing;\n"> <"\t} while (0);\n"> <"\tEOF\n"> <"\tgit update-index --add x &&\n"> <"\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tdo\n"> <"\t{\n"> <"\t nothing;\n"> <"\t}\n"> <"\twhile (0);\n"> <"\tEOF\n"> <"\n"> <"\tcat <<-\\EOF >expect &&\n"> <"\tdiff --git a/x b/x\n"> <"\tindex adf3937..6edc172 100644\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,3 +1,5 @@\n"> <"\t-do {\n"> <"\t+do\n"> <"\t+{\n"> <"\t nothing;\n"> <"\t-} while (0);\n"> <"\t+}\n"> <"\t+while (0);\n"> <"\tEOF\n"> <"\n"> <"\tgit diff >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\tgit diff -w >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\tgit diff -b >out &&\n"> <"\ttest_cmp expect out\n"> ) } ) (C {(test_expect_success)} {(SQ <"another test, without options">)} { (SQ <"\n"> <"\ttr Q \"\\015\" <<-\\EOF >x &&\n"> <"\twhitespace at beginning\n"> <"\twhitespace change\n"> <"\twhitespace in the middle\n"> <"\twhitespace at end\n"> <"\tunchanged line\n"> <"\tCR at endQ\n"> <"\tEOF\n"> <"\n"> <"\tgit update-index x &&\n"> <"\n"> <"\ttr \"_\" \" \" <<-\\EOF >x &&\n"> <"\t_\twhitespace at beginning\n"> <"\twhitespace \t change\n"> <"\twhite space in the middle\n"> <"\twhitespace at end__\n"> <"\tunchanged line\n"> <"\tCR at end\n"> <"\tEOF\n"> <"\n"> <"\ttr \"Q_\" \"\\015 \" <<-\\EOF >expect &&\n"> <"\tdiff --git a/x b/x\n"> <"\tindex d99af23..22d9f73 100644\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,6 +1,6 @@\n"> <"\t-whitespace at beginning\n"> <"\t-whitespace change\n"> <"\t-whitespace in the middle\n"> <"\t-whitespace at end\n"> <"\t+ \twhitespace at beginning\n"> <"\t+whitespace \t change\n"> <"\t+white space in the middle\n"> <"\t+whitespace at end__\n"> <"\t unchanged line\n"> <"\t-CR at endQ\n"> <"\t+CR at end\n"> <"\tEOF\n"> <"\n"> <"\tgit diff >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\t>expect &&\n"> <"\tgit diff -w >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\tgit diff -w -b >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\tgit diff -w --ignore-space-at-eol >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\tgit diff -w -b --ignore-space-at-eol >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\n"> <"\ttr \"Q_\" \"\\015 \" <<-\\EOF >expect &&\n"> <"\tdiff --git a/x b/x\n"> <"\tindex d99af23..22d9f73 100644\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,6 +1,6 @@\n"> <"\t-whitespace at beginning\n"> <"\t+_\twhitespace at beginning\n"> <"\t whitespace \t change\n"> <"\t-whitespace in the middle\n"> <"\t+white space in the middle\n"> <"\t whitespace at end__\n"> <"\t unchanged line\n"> <"\t CR at end\n"> <"\tEOF\n"> <"\tgit diff -b >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\tgit diff -b --ignore-space-at-eol >out &&\n"> <"\ttest_cmp expect out &&\n"> <"\n"> <"\ttr \"Q_\" \"\\015 \" <<-\\EOF >expect &&\n"> <"\tdiff --git a/x b/x\n"> <"\tindex d99af23..22d9f73 100644\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,6 +1,6 @@\n"> <"\t-whitespace at beginning\n"> <"\t-whitespace change\n"> <"\t-whitespace in the middle\n"> <"\t+_\twhitespace at beginning\n"> <"\t+whitespace \t change\n"> <"\t+white space in the middle\n"> <"\t whitespace at end__\n"> <"\t unchanged line\n"> <"\t CR at end\n"> <"\tEOF\n"> <"\tgit diff --ignore-space-at-eol >out &&\n"> <"\ttest_cmp expect out\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: only new lines">)} { (SQ <"\n"> <"\ttest_seq 5 >x &&\n"> <"\tgit update-index x &&\n"> <"\ttest_seq 5 | sed \"/3/i\\\\\n"> <"\" >x &&\n"> <"\tgit diff --ignore-blank-lines >out &&\n"> <"\t>expect &&\n"> <"\ttest_cmp out expect\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: only new lines with space">)} { (SQ <"\n"> <"\ttest_seq 5 >x &&\n"> <"\tgit update-index x &&\n"> <"\ttest_seq 5 | sed \"/3/i\\\\\n"> <" \" >x &&\n"> <"\tgit diff -w --ignore-blank-lines >out &&\n"> <"\t>expect &&\n"> <"\ttest_cmp out expect\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: after change">)} { (SQ <"\n"> <"\tcat <<-\\EOF >x &&\n"> <"\t1\n"> <"\t2\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\n"> <"\t6\n"> <"\t7\n"> <"\tEOF\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tchange\n"> <"\n"> <"\t1\n"> <"\t2\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\t6\n"> <"\n"> <"\t7\n"> <"\tEOF\n"> <"\tgit diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,6 +1,7 @@\n"> <"\t+change\n"> <"\t+\n"> <"\t 1\n"> <"\t 2\n"> <"\t-\n"> <"\t 3\n"> <"\t 4\n"> <"\t 5\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: before change">)} { (SQ <"\n"> <"\tcat <<-\\EOF >x &&\n"> <"\t1\n"> <"\t2\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\t6\n"> <"\t7\n"> <"\tEOF\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\n"> <"\t1\n"> <"\t2\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\n"> <"\t6\n"> <"\t7\n"> <"\tchange\n"> <"\tEOF\n"> <"\tgit diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -4,5 +4,7 @@\n"> <"\t 3\n"> <"\t 4\n"> <"\t 5\n"> <"\t+\n"> <"\t 6\n"> <"\t 7\n"> <"\t+change\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: between changes">)} { (SQ <"\n"> <"\tcat <<-\\EOF >x &&\n"> <"\t1\n"> <"\t2\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\n"> <"\n"> <"\t6\n"> <"\t7\n"> <"\t8\n"> <"\t9\n"> <"\t10\n"> <"\tEOF\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tchange\n"> <"\t1\n"> <"\t2\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\t6\n"> <"\t7\n"> <"\t8\n"> <"\n"> <"\t9\n"> <"\t10\n"> <"\tchange\n"> <"\tEOF\n"> <"\tgit diff --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,5 +1,7 @@\n"> <"\t+change\n"> <"\t 1\n"> <"\t 2\n"> <"\t+\n"> <"\t 3\n"> <"\t 4\n"> <"\t 5\n"> <"\t@@ -8,5 +8,7 @@\n"> <"\t 6\n"> <"\t 7\n"> <"\t 8\n"> <"\t+\n"> <"\t 9\n"> <"\t 10\n"> <"\t+change\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: between changes (with interhunkctx)">)} { (SQ <"\n"> <"\ttest_seq 10 >x &&\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tchange\n"> <"\t1\n"> <"\t2\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\n"> <"\t6\n"> <"\t7\n"> <"\t8\n"> <"\t9\n"> <"\n"> <"\t10\n"> <"\tchange\n"> <"\tEOF\n"> <"\tgit diff --inter-hunk-context=2 --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,10 +1,15 @@\n"> <"\t+change\n"> <"\t 1\n"> <"\t 2\n"> <"\t+\n"> <"\t 3\n"> <"\t 4\n"> <"\t 5\n"> <"\t+\n"> <"\t 6\n"> <"\t 7\n"> <"\t 8\n"> <"\t 9\n"> <"\t+\n"> <"\t 10\n"> <"\t+change\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: scattered spaces">)} { (SQ <"\n"> <"\ttest_seq 10 >x &&\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tchange\n"> <"\t1\n"> <"\t2\n"> <"\t3\n"> <"\n"> <"\t4\n"> <"\n"> <"\t5\n"> <"\n"> <"\t6\n"> <"\n"> <"\n"> <"\t7\n"> <"\n"> <"\t8\n"> <"\t9\n"> <"\t10\n"> <"\tchange\n"> <"\tEOF\n"> <"\tgit diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,3 +1,4 @@\n"> <"\t+change\n"> <"\t 1\n"> <"\t 2\n"> <"\t 3\n"> <"\t@@ -8,3 +15,4 @@\n"> <"\t 8\n"> <"\t 9\n"> <"\t 10\n"> <"\t+change\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: spaces coalesce">)} { (SQ <"\n"> <"\ttest_seq 6 >x &&\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tchange\n"> <"\t1\n"> <"\t2\n"> <"\t3\n"> <"\n"> <"\t4\n"> <"\n"> <"\t5\n"> <"\n"> <"\t6\n"> <"\tchange\n"> <"\tEOF\n"> <"\tgit diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,6 +1,11 @@\n"> <"\t+change\n"> <"\t 1\n"> <"\t 2\n"> <"\t 3\n"> <"\t+\n"> <"\t 4\n"> <"\t+\n"> <"\t 5\n"> <"\t+\n"> <"\t 6\n"> <"\t+change\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"ignore-blank-lines: mix changes and blank lines">)} { (SQ <"\n"> <"\ttest_seq 16 >x &&\n"> <"\tgit update-index x &&\n"> <"\tcat <<-\\EOF >x &&\n"> <"\tchange\n"> <"\t1\n"> <"\t2\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\t5\n"> <"\tchange\n"> <"\t6\n"> <"\t7\n"> <"\t8\n"> <"\n"> <"\t9\n"> <"\t10\n"> <"\t11\n"> <"\tchange\n"> <"\t12\n"> <"\t13\n"> <"\t14\n"> <"\n"> <"\t15\n"> <"\t16\n"> <"\tchange\n"> <"\tEOF\n"> <"\tgit diff --ignore-blank-lines >out.tmp &&\n"> <"\tcat <<-\\EOF >expected &&\n"> <"\tdiff --git a/x b/x\n"> <"\t--- a/x\n"> <"\t+++ b/x\n"> <"\t@@ -1,8 +1,11 @@\n"> <"\t+change\n"> <"\t 1\n"> <"\t 2\n"> <"\t+\n"> <"\t 3\n"> <"\t 4\n"> <"\t 5\n"> <"\t+change\n"> <"\t 6\n"> <"\t 7\n"> <"\t 8\n"> <"\t@@ -9,8 +13,11 @@\n"> <"\t 9\n"> <"\t 10\n"> <"\t 11\n"> <"\t+change\n"> <"\t 12\n"> <"\t 13\n"> <"\t 14\n"> <"\t+\n"> <"\t 15\n"> <"\t 16\n"> <"\t+change\n"> <"\tEOF\n"> <"\tcompare_diff_patch expected out.tmp\n"> ) } ) (C {(test_expect_success)} {(SQ <"check mixed spaces and tabs in indent">)} { (SQ <"\n"> <"\t# This is indented with SP HT SP.\n"> <"\techo \" \t foo();\" >x &&\n"> <"\tgit diff --check | grep \"space before tab in indent\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"check mixed tabs and spaces in indent">)} { (SQ <"\n"> <"\t# This is indented with HT SP HT.\n"> <"\techo \"\t \tfoo();\" >x &&\n"> <"\tgit diff --check | grep \"space before tab in indent\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with no whitespace errors">)} { (SQ <"\n"> <"\tgit commit -m \"snapshot\" &&\n"> <"\techo \"foo();\" >x &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with trailing whitespace">)} {(SQ <"\n"> <"\techo \"foo(); \" >x &&\n"> <"\ttest_must_fail git diff --check\n">)} ) (C {(test_expect_success)} {(SQ <"check with space before tab in indent">)} { (SQ <"\n"> <"\t# indent has space followed by hard tab\n"> <"\techo \" \tfoo();\" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"--check and --exit-code are not exclusive">)} {(SQ <"\n"> <"\tgit checkout x &&\n"> <"\tgit diff --check --exit-code\n">)} ) (C {(test_expect_success)} {(SQ <"--check and --quiet are not exclusive">)} {(SQ <"\n"> <"\tgit diff --check --quiet\n">)} ) (C {(test_expect_success)} {(SQ <"check staged with no whitespace errors">)} { (SQ <"\n"> <"\techo \"foo();\" >x &&\n"> <"\tgit add x &&\n"> <"\tgit diff --cached --check\n">) } ) (C {(test_expect_success)} {(SQ <"check staged with trailing whitespace">)} { (SQ <"\n"> <"\techo \"foo(); \" >x &&\n"> <"\tgit add x &&\n"> <"\ttest_must_fail git diff --cached --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check staged with space before tab in indent">)} { (SQ <"\n"> <"\t# indent has space followed by hard tab\n"> <"\techo \" \tfoo();\" >x &&\n"> <"\tgit add x &&\n"> <"\ttest_must_fail git diff --cached --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with no whitespace errors (diff-index)">)} { (SQ <"\n"> <"\techo \"foo();\" >x &&\n"> <"\tgit add x &&\n"> <"\tgit diff-index --check HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with trailing whitespace (diff-index)">)} { (SQ <"\n"> <"\techo \"foo(); \" >x &&\n"> <"\tgit add x &&\n"> <"\ttest_must_fail git diff-index --check HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with space before tab in indent (diff-index)">)} { (SQ <"\n"> <"\t# indent has space followed by hard tab\n"> <"\techo \" \tfoo();\" >x &&\n"> <"\tgit add x &&\n"> <"\ttest_must_fail git diff-index --check HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check staged with no whitespace errors (diff-index)">)} { (SQ <"\n"> <"\techo \"foo();\" >x &&\n"> <"\tgit add x &&\n"> <"\tgit diff-index --cached --check HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check staged with trailing whitespace (diff-index)">)} { (SQ <"\n"> <"\techo \"foo(); \" >x &&\n"> <"\tgit add x &&\n"> <"\ttest_must_fail git diff-index --cached --check HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check staged with space before tab in indent (diff-index)">)} { (SQ <"\n"> <"\t# indent has space followed by hard tab\n"> <"\techo \" \tfoo();\" >x &&\n"> <"\tgit add x &&\n"> <"\ttest_must_fail git diff-index --cached --check HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with no whitespace errors (diff-tree)">)} { (SQ <"\n"> <"\techo \"foo();\" >x &&\n"> <"\tgit commit -m \"new commit\" x &&\n"> <"\tgit diff-tree --check HEAD^ HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with trailing whitespace (diff-tree)">)} { (SQ <"\n"> <"\techo \"foo(); \" >x &&\n"> <"\tgit commit -m \"another commit\" x &&\n"> <"\ttest_must_fail git diff-tree --check HEAD^ HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check with space before tab in indent (diff-tree)">)} { (SQ <"\n"> <"\t# indent has space followed by hard tab\n"> <"\techo \" \tfoo();\" >x &&\n"> <"\tgit commit -m \"yet another\" x &&\n"> <"\ttest_must_fail git diff-tree --check HEAD^ HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"check trailing whitespace (trailing-space: off)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"-trailing-space\" &&\n"> <"\techo \"foo (); \" >x &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check trailing whitespace (trailing-space: on)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"trailing-space\" &&\n"> <"\techo \"foo (); \" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check space before tab in indent (space-before-tab: off)">)} { (SQ <"\n"> <"\t# indent contains space followed by HT\n"> <"\tgit config core.whitespace \"-space-before-tab\" &&\n"> <"\techo \" \tfoo ();\" >x &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check space before tab in indent (space-before-tab: on)">)} { (SQ <"\n"> <"\t# indent contains space followed by HT\n"> <"\tgit config core.whitespace \"space-before-tab\" &&\n"> <"\techo \" \tfoo (); \" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check spaces as indentation (indent-with-non-tab: off)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"-indent-with-non-tab\" &&\n"> <"\techo \" foo ();\" >x &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check spaces as indentation (indent-with-non-tab: on)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"indent-with-non-tab\" &&\n"> <"\techo \" foo ();\" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"ditto, but tabwidth=9">)} { (SQ <"\n"> <"\tgit config core.whitespace \"indent-with-non-tab,tabwidth=9\" &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check tabs and spaces as indentation (indent-with-non-tab: on)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"indent-with-non-tab\" &&\n"> <"\techo \"\t foo ();\" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"ditto, but tabwidth=10">)} { (SQ <"\n"> <"\tgit config core.whitespace \"indent-with-non-tab,tabwidth=10\" &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"ditto, but tabwidth=20">)} { (SQ <"\n"> <"\tgit config core.whitespace \"indent-with-non-tab,tabwidth=20\" &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check tabs as indentation (tab-in-indent: off)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"-tab-in-indent\" &&\n"> <"\techo \"\tfoo ();\" >x &&\n"> <"\tgit diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check tabs as indentation (tab-in-indent: on)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"tab-in-indent\" &&\n"> <"\techo \"\tfoo ();\" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check tabs and spaces as indentation (tab-in-indent: on)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"tab-in-indent\" &&\n"> <"\techo \"\t foo ();\" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"ditto, but tabwidth=1 (must be irrelevant)">)} { (SQ <"\n"> <"\tgit config core.whitespace \"tab-in-indent,tabwidth=1\" &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check tab-in-indent and indent-with-non-tab conflict">)} { (SQ <"\n"> <"\tgit config core.whitespace \"tab-in-indent,indent-with-non-tab\" &&\n"> <"\techo \"foo ();\" >x &&\n"> <"\ttest_must_fail git diff --check\n"> ) } ) (C {(test_expect_success)} {(SQ <"check tab-in-indent excluded from wildcard whitespace attribute">)} { (SQ <"\n"> <"\tgit config --unset core.whitespace &&\n"> <"\techo \"x whitespace\" >.gitattributes &&\n"> <"\techo \"\t foo ();\" >x &&\n"> <"\tgit diff --check &&\n"> <"\trm -f .gitattributes\n"> ) } ) (C {(test_expect_success)} {(SQ <"line numbers in --check output are correct">)} { (SQ <"\n"> <"\techo \"\" >x &&\n"> <"\techo \"foo(); \" >>x &&\n"> <"\tgit diff --check | grep \"x:2:\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"checkdiff detects new trailing blank lines (1)">)} { (SQ <"\n"> <"\techo \"foo();\" >x &&\n"> <"\techo \"\" >>x &&\n"> <"\tgit diff --check | grep \"new blank line\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"checkdiff detects new trailing blank lines (2)">)} { (SQ <"\n"> <"\t{ echo a; echo b; echo; echo; } >x &&\n"> <"\tgit add x &&\n"> <"\t{ echo a; echo; echo; echo; echo; } >x &&\n"> <"\tgit diff --check | grep \"new blank line\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"checkdiff allows new blank lines">)} { (SQ <"\n"> <"\tgit checkout x &&\n"> <"\tmv x y &&\n"> <"\t(\n"> <"\t\techo \"/* This is new */\" &&\n"> <"\t\techo \"\" &&\n"> <"\t\tcat y\n"> <"\t) >x &&\n"> <"\tgit diff --check\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ )} do_expansion: True here_end: EOF was_filled: True spids: [1158] ) (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[1161]) ] ) (C {(test_expect_success)} {(SQ <"whitespace-only changes not reported">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\techo >x \"hello world\" &&\n"> <"\tgit add x &&\n"> <"\tgit commit -m \"hello 1\" &&\n"> <"\techo >x \"hello world\" &&\n"> <"\tgit diff -b >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("diff --git a/x b/z\n") ("similarity index NUM%\n") ("rename from x\n") ("rename to z\n") ("index 380c32a..a97b785 100644\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1184] ) (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[1187]) ] ) (C {(test_expect_success)} {(SQ <"whitespace-only changes reported across renames">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tfor i in 1 2 3 4 5 6 7 8 9; do echo \"$i$i$i$i$i$i\"; done >x &&\n"> <"\tgit add x &&\n"> <"\tgit commit -m \"base\" &&\n"> <"\tsed -e \"5s/^/ /\" x >z &&\n"> <"\tgit rm x &&\n"> <"\tgit add z &&\n"> <"\tgit diff -w -M --cached |\n"> <"\tsed -e \"/^similarity index /s/[0-9][0-9]*/NUM/\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1218]) (HereDoc op_id: Redir_DLess fd: -1 body: {("diff --git a/empty b/void\n") ("similarity index 100%\n") ("rename from empty\n") ("rename to void\n") } do_expansion: False here_end: EOF was_filled: True spids: [1221] ) ] ) (C {(test_expect_success)} {(SQ <"rename empty">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\t>empty &&\n"> <"\tgit add empty &&\n"> <"\tgit commit -m empty &&\n"> <"\tgit mv empty void &&\n"> <"\tgit diff -w --cached -M >current &&\n"> <"\ttest_cmp expected current\n"> ) } ) (C {(test_expect_success)} {(SQ <"combined diff with autocrlf conversion">)} { (SQ <"\n"> <"\n"> <"\tgit reset --hard &&\n"> <"\techo >x hello &&\n"> <"\tgit commit -m \"one side\" x &&\n"> <"\tgit checkout HEAD^ &&\n"> <"\techo >x goodbye &&\n"> <"\tgit commit -m \"the other side\" x &&\n"> <"\tgit config core.autocrlf true &&\n"> <"\ttest_must_fail git merge master &&\n"> <"\n"> <"\tgit diff | sed -e \"1,/^@@@/d\" >actual &&\n"> <"\t! grep \"^-\" actual\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"setup diff colors">)} { (SQ <"\n"> <"\tgit config color.diff always &&\n"> <"\tgit config color.diff.plain normal &&\n"> <"\tgit config color.diff.meta bold &&\n"> <"\tgit config color.diff.frag cyan &&\n"> <"\tgit config color.diff.func normal &&\n"> <"\tgit config color.diff.old red &&\n"> <"\tgit config color.diff.new green &&\n"> <"\tgit config color.diff.commit yellow &&\n"> <"\tgit config color.diff.whitespace blue &&\n"> <"\n"> <"\tgit config core.autocrlf false\n"> ) } ) (C {(test_expect_success)} {(SQ <"diff that introduces a line with only tabs">)} { (SQ <"\n"> <"\tgit config core.whitespace blank-at-eol &&\n"> <"\tgit reset --hard &&\n"> <"\techo \"test\" >x &&\n"> <"\tgit commit -m \"initial\" x &&\n"> <"\techo \"{NTN}\" | tr \"NT\" \"\\n\\t\" >>x &&\n"> <"\tgit -c color.diff=always diff | test_decode_color >current &&\n"> <"\n"> <"\tcat >expected <<-\\EOF &&\n"> <"\t<BOLD>diff --git a/x b/x<RESET>\n"> <"\t<BOLD>index 9daeafb..2874b91 100644<RESET>\n"> <"\t<BOLD>--- a/x<RESET>\n"> <"\t<BOLD>+++ b/x<RESET>\n"> <"\t<CYAN>@@ -1 +1,4 @@<RESET>\n"> <"\t test<RESET>\n"> <"\t<GREEN>+<RESET><GREEN>{<RESET>\n"> <"\t<GREEN>+<RESET><BLUE>\t<RESET>\n"> <"\t<GREEN>+<RESET><GREEN>}<RESET>\n"> <"\tEOF\n"> <"\n"> <"\ttest_cmp expected current\n"> ) } ) (C {(test_expect_success)} {(SQ <"diff that introduces and removes ws breakages">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\t{\n"> <"\t\techo \"0. blank-at-eol \" &&\n"> <"\t\techo \"1. blank-at-eol \"\n"> <"\t} >x &&\n"> <"\tgit commit -a --allow-empty -m preimage &&\n"> <"\t{\n"> <"\t\techo \"0. blank-at-eol \" &&\n"> <"\t\techo \"1. still-blank-at-eol \" &&\n"> <"\t\techo \"2. and a new line \"\n"> <"\t} >x &&\n"> <"\n"> <"\tgit -c color.diff=always diff |\n"> <"\ttest_decode_color >current &&\n"> <"\n"> <"\tcat >expected <<-\\EOF &&\n"> <"\t<BOLD>diff --git a/x b/x<RESET>\n"> <"\t<BOLD>index d0233a2..700886e 100644<RESET>\n"> <"\t<BOLD>--- a/x<RESET>\n"> <"\t<BOLD>+++ b/x<RESET>\n"> <"\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n"> <"\t 0. blank-at-eol <RESET>\n"> <"\t<RED>-1. blank-at-eol <RESET>\n"> <"\t<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>\n"> <"\t<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>\n"> <"\tEOF\n"> <"\n"> <"\ttest_cmp expected current\n"> ) } ) (C {(test_expect_success)} {(SQ <"ws-error-highlight test setup">)} { (SQ <"\n"> <"\n"> <"\tgit reset --hard &&\n"> <"\t{\n"> <"\t\techo \"0. blank-at-eol \" &&\n"> <"\t\techo \"1. blank-at-eol \"\n"> <"\t} >x &&\n"> <"\tgit commit -a --allow-empty -m preimage &&\n"> <"\t{\n"> <"\t\techo \"0. blank-at-eol \" &&\n"> <"\t\techo \"1. still-blank-at-eol \" &&\n"> <"\t\techo \"2. and a new line \"\n"> <"\t} >x &&\n"> <"\n"> <"\tcat >expect.default-old <<-\\EOF &&\n"> <"\t<BOLD>diff --git a/x b/x<RESET>\n"> <"\t<BOLD>index d0233a2..700886e 100644<RESET>\n"> <"\t<BOLD>--- a/x<RESET>\n"> <"\t<BOLD>+++ b/x<RESET>\n"> <"\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n"> <"\t 0. blank-at-eol <RESET>\n"> <"\t<RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>\n"> <"\t<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>\n"> <"\t<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>\n"> <"\tEOF\n"> <"\n"> <"\tcat >expect.all <<-\\EOF &&\n"> <"\t<BOLD>diff --git a/x b/x<RESET>\n"> <"\t<BOLD>index d0233a2..700886e 100644<RESET>\n"> <"\t<BOLD>--- a/x<RESET>\n"> <"\t<BOLD>+++ b/x<RESET>\n"> <"\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n"> <"\t <RESET>0. blank-at-eol<RESET><BLUE> <RESET>\n"> <"\t<RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>\n"> <"\t<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>\n"> <"\t<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>\n"> <"\tEOF\n"> <"\n"> <"\tcat >expect.none <<-\\EOF\n"> <"\t<BOLD>diff --git a/x b/x<RESET>\n"> <"\t<BOLD>index d0233a2..700886e 100644<RESET>\n"> <"\t<BOLD>--- a/x<RESET>\n"> <"\t<BOLD>+++ b/x<RESET>\n"> <"\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n"> <"\t 0. blank-at-eol <RESET>\n"> <"\t<RED>-1. blank-at-eol <RESET>\n"> <"\t<GREEN>+1. still-blank-at-eol <RESET>\n"> <"\t<GREEN>+2. and a new line <RESET>\n"> <"\tEOF\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"test --ws-error-highlight option">)} { (SQ <"\n"> <"\n"> <"\tgit -c color.diff=always diff --ws-error-highlight=default,old |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.default-old current &&\n"> <"\n"> <"\tgit -c color.diff=always diff --ws-error-highlight=all |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.all current &&\n"> <"\n"> <"\tgit -c color.diff=always diff --ws-error-highlight=none |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.none current\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"test diff.wsErrorHighlight config">)} { (SQ <"\n"> <"\n"> <"\tgit -c color.diff=always -c diff.wsErrorHighlight=default,old diff |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.default-old current &&\n"> <"\n"> <"\tgit -c color.diff=always -c diff.wsErrorHighlight=all diff |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.all current &&\n"> <"\n"> <"\tgit -c color.diff=always -c diff.wsErrorHighlight=none diff |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.none current\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"option overrides diff.wsErrorHighlight">)} { (SQ <"\n"> <"\n"> <"\tgit -c color.diff=always -c diff.wsErrorHighlight=none \\\n"> <"\t\tdiff --ws-error-highlight=default,old |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.default-old current &&\n"> <"\n"> <"\tgit -c color.diff=always -c diff.wsErrorHighlight=default \\\n"> <"\t\tdiff --ws-error-highlight=all |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.all current &&\n"> <"\n"> <"\tgit -c color.diff=always -c diff.wsErrorHighlight=all \\\n"> <"\t\tdiff --ws-error-highlight=none |\n"> <"\ttest_decode_color >current &&\n"> <"\ttest_cmp expect.none current\n"> <"\n"> ) } ) (C {(test_done)}) ] )