Browse Source
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>maint


1 changed files with 126 additions and 0 deletions
@ -0,0 +1,126 @@
@@ -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 |
Loading…
Reference in new issue