| #!/bin/sh | 
 |  | 
 | test_description='blame output in various formats on a simple case' | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success 'setup' ' | 
 | 	echo a >file && | 
 | 	git add file && | 
 | 	test_tick && | 
 | 	git commit -m one && | 
 | 	echo b >>file && | 
 | 	echo c >>file && | 
 | 	echo d >>file && | 
 | 	test_tick && | 
 | 	git commit -a -m two && | 
 | 	ID1=$(git rev-parse HEAD^) && | 
 | 	shortID1="^$(git rev-parse HEAD^ |cut -c 1-17)" && | 
 | 	ID2=$(git rev-parse HEAD) && | 
 | 	shortID2="$(git rev-parse HEAD |cut -c 1-18)" | 
 | ' | 
 |  | 
 | cat >expect <<EOF | 
 | $shortID1 (A U Thor 2005-04-07 15:13:13 -0700 1) a | 
 | $shortID2 (A U Thor 2005-04-07 15:14:13 -0700 2) b | 
 | $shortID2 (A U Thor 2005-04-07 15:14:13 -0700 3) c | 
 | $shortID2 (A U Thor 2005-04-07 15:14:13 -0700 4) d | 
 | EOF | 
 | test_expect_success 'normal blame output' ' | 
 | 	git blame --abbrev=17 file >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | COMMIT1="author A U Thor | 
 | author-mail <author@example.com> | 
 | author-time 1112911993 | 
 | author-tz -0700 | 
 | committer C O Mitter | 
 | committer-mail <committer@example.com> | 
 | committer-time 1112911993 | 
 | committer-tz -0700 | 
 | summary one | 
 | boundary | 
 | filename file" | 
 | COMMIT2="author A U Thor | 
 | author-mail <author@example.com> | 
 | author-time 1112912053 | 
 | author-tz -0700 | 
 | committer C O Mitter | 
 | committer-mail <committer@example.com> | 
 | committer-time 1112912053 | 
 | committer-tz -0700 | 
 | summary two | 
 | previous $ID1 file | 
 | filename file" | 
 |  | 
 | cat >expect <<EOF | 
 | $ID1 1 1 1 | 
 | $COMMIT1 | 
 | 	a | 
 | $ID2 2 2 3 | 
 | $COMMIT2 | 
 | 	b | 
 | $ID2 3 3 | 
 | 	c | 
 | $ID2 4 4 | 
 | 	d | 
 | EOF | 
 | test_expect_success 'blame --porcelain output' ' | 
 | 	git blame --porcelain file >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | cat >expect <<EOF | 
 | $ID1 1 1 1 | 
 | $COMMIT1 | 
 | 	a | 
 | $ID2 2 2 3 | 
 | $COMMIT2 | 
 | 	b | 
 | $ID2 3 3 | 
 | $COMMIT2 | 
 | 	c | 
 | $ID2 4 4 | 
 | $COMMIT2 | 
 | 	d | 
 | EOF | 
 | test_expect_success 'blame --line-porcelain output' ' | 
 | 	git blame --line-porcelain file >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success '--porcelain detects first non-blank line as subject' ' | 
 | 	( | 
 | 		GIT_INDEX_FILE=.git/tmp-index && | 
 | 		export GIT_INDEX_FILE && | 
 | 		echo "This is it" >single-file && | 
 | 		git add single-file && | 
 | 		tree=$(git write-tree) && | 
 | 		commit=$(printf "%s\n%s\n%s\n\n\n  \noneline\n\nbody\n" \ | 
 | 			"tree $tree" \ | 
 | 			"author A <a@b.c> 123456789 +0000" \ | 
 | 			"committer C <c@d.e> 123456789 +0000" | | 
 | 		git hash-object -w -t commit --stdin) && | 
 | 		git blame --porcelain $commit -- single-file >output && | 
 | 		grep "^summary oneline$" output | 
 | 	) | 
 | ' | 
 |  | 
 | test_done |