|  | #!/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 |