t3417: Add test cases for "rebase --whitespace=fix"
authorBjörn Gustavsson <bgustavsson@gmail.com>
Sat, 6 Mar 2010 14:31:17 +0000 (15:31 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 7 Mar 2010 07:53:00 +0000 (23:53 -0800)
The command "git rebase --whitespace=fix HEAD~<N>" is supposed to
only clean up trailing whitespace, and the expectation is that it
cannot fail.

Unfortunately, if one commit adds a blank line at the end of a file
and a subsequent commit adds more non-blank lines after the blank
line, "git apply" (used indirectly by "git rebase") will fail to apply
the patch of the second commit.

Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3417-rebase-whitespace-fix.sh [new file with mode: 0755]
diff --git a/t/t3417-rebase-whitespace-fix.sh b/t/t3417-rebase-whitespace-fix.sh
new file mode 100755 (executable)
index 0000000..220a740
--- /dev/null
@@ -0,0 +1,126 @@
+#!/bin/sh
+
+test_description='git rebase --whitespace=fix
+
+This test runs git rebase --whitespace=fix and make sure that it works.
+'
+
+. ./test-lib.sh
+
+# prepare initial revision of "file" with a blank line at the end
+cat >file <<EOF
+a
+b
+c
+
+EOF
+
+# expected contents in "file" after rebase
+cat >expect-first <<EOF
+a
+b
+c
+EOF
+
+# prepare second revision of "file"
+cat >second <<EOF
+a
+b
+c
+
+d
+e
+f
+
+
+
+
+EOF
+
+# expected contents in second revision after rebase
+cat >expect-second <<EOF
+a
+b
+c
+
+d
+e
+f
+EOF
+
+test_expect_success 'blank line at end of file; extend at end of file' '
+       git commit --allow-empty -m "Initial empty commit" &&
+       git add file && git commit -m first &&
+       mv second file &&
+       git add file && git commit -m second &&
+       git rebase --whitespace=fix HEAD^^ &&
+       git diff --exit-code HEAD^:file expect-first &&
+       test_cmp file expect-second
+'
+
+# prepare third revision of "file"
+sed -e's/Z//' >third <<EOF
+a
+b
+c
+
+d
+e
+f
+    Z
+ Z
+h
+i
+j
+k
+l
+EOF
+
+sed -e's/ //g' <third >expect-third
+
+test_expect_success 'two blanks line at end of file; extend at end of file' '
+       cp third file && git add file && git commit -m third &&
+       git rebase --whitespace=fix HEAD^^ &&
+       git diff --exit-code HEAD^:file expect-second &&
+       test_cmp file expect-third
+'
+
+test_expect_success 'same, but do not remove trailing spaces' '
+       git config core.whitespace "-blank-at-eol" &&
+       git reset --hard HEAD^ &&
+       cp third file && git add file && git commit -m third &&
+       git rebase --whitespace=fix HEAD^^
+       git diff --exit-code HEAD^:file expect-second &&
+       test_cmp file third
+'
+
+sed -e's/Z//' >beginning <<EOF
+a
+                   Z
+       Z
+EOF
+
+cat >expect-beginning <<EOF
+a
+
+
+1
+2
+3
+4
+5
+EOF
+
+test_expect_success 'at beginning of file' '
+       git config core.whitespace "blank-at-eol" &&
+       cp beginning file &&
+       git commit -m beginning file &&
+       for i in 1 2 3 4 5; do
+               echo $i
+       done >> file &&
+       git commit -m more file &&
+       git rebase --whitespace=fix HEAD^^ &&
+       test_cmp file expect-beginning
+'
+
+test_done