| #!/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 | 
 | ' | 
 |  | 
 | cat >expect <<'EOF' | 
 | ^baf5e0b (A U Thor 2005-04-07 15:13:13 -0700 1) a | 
 | 8825379d (A U Thor 2005-04-07 15:14:13 -0700 2) b | 
 | 8825379d (A U Thor 2005-04-07 15:14:13 -0700 3) c | 
 | 8825379d (A U Thor 2005-04-07 15:14:13 -0700 4) d | 
 | EOF | 
 | test_expect_success 'normal blame output' ' | 
 | 	git blame file >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | ID1=baf5e0b3869e0b2b2beb395a3720c7b51eac94fc | 
 | 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' | 
 | ID2=8825379dfb8a1267b58e8e5bcf69eec838f685ec | 
 | 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 baf5e0b3869e0b2b2beb395a3720c7b51eac94fc 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 |