1# This file isn't used as a test script directly, instead it is 2# sourced from t8001-annotate.sh and t8001-blame.sh. 3 4check_count () { 5head= 6case"$1"in-h)head="$2";shift;shift;;esac 7echo"$PROGfile$head">&4 8$PROGfile$head>.result ||return1 9cat .result | perl -e' 10 my %expect = (@ARGV); 11 my %count = (); 12 while (<STDIN>) { 13 if (/^[0-9a-f]+\t\(([^\t]+)\t/) { 14 my$author=$1; 15 for ($author) { s/^\s*//; s/\s*$//; } 16 if (exists$expect{$author}) { 17$count{$author}++; 18 } 19 } 20 } 21 my$bad= 0; 22 while (my ($author,$count) = each %count) { 23 my$ok; 24 if ($expect{$author} !=$count) { 25$bad= 1; 26$ok= "bad"; 27 } 28 else { 29$ok= "good"; 30 } 31 print STDERR "Author$author(expected$expect{$author}, attributed$count)$ok\n"; 32 } 33 exit($bad); 34 '"$@" 35} 36 37test_expect_success \ 38'prepare reference tree' \ 39'echo "1A quick brown fox jumps over the" >file && 40 echo "lazy dog" >>file && 41 git add file 42 GIT_AUTHOR_NAME="A" git commit -a -m "Initial."' 43 44test_expect_success \ 45'check all lines blamed on A' \ 46'check_count A 2' 47 48test_expect_success \ 49'Setup new lines blamed on B' \ 50'echo "2A quick brown fox jumps over the" >>file && 51 echo "lazy dog" >> file && 52 GIT_AUTHOR_NAME="B" git commit -a -m "Second."' 53 54test_expect_success \ 55'Two lines blamed on A, two on B' \ 56'check_count A 2 B 2' 57 58test_expect_success \ 59'merge-setup part 1' \ 60'git checkout -b branch1 master && 61 echo "3A slow green fox jumps into the" >> file && 62 echo "well." >> file && 63 GIT_AUTHOR_NAME="B1" git commit -a -m "Branch1-1"' 64 65test_expect_success \ 66'Two lines blamed on A, two on B, two on B1' \ 67'check_count A 2 B 2 B1 2' 68 69test_expect_success \ 70'merge-setup part 2' \ 71'git checkout -b branch2 master && 72 sed -e "s/2A quick brown/4A quick brown lazy dog/" < file > file.new && 73 mv file.new file && 74 GIT_AUTHOR_NAME="B2" git commit -a -m "Branch2-1"' 75 76test_expect_success \ 77'Two lines blamed on A, one on B, one on B2' \ 78'check_count A 2 B 1 B2 1' 79 80test_expect_success \ 81'merge-setup part 3' \ 82'git pull . branch1' 83 84test_expect_success \ 85'Two lines blamed on A, one on B, two on B1, one on B2' \ 86'check_count A 2 B 1 B1 2 B2 1' 87 88test_expect_success \ 89'Annotating an old revision works' \ 90'check_count -h master A 2 B 2' 91 92test_expect_success \ 93'Annotating an old revision works' \ 94'check_count -h master^ A 2' 95 96test_expect_success \ 97'merge-setup part 4' \ 98'echo "evil merge." >>file && 99 git commit -a --amend' 100 101test_expect_success \ 102'Two lines blamed on A, one on B, two on B1, one on B2, one on A U Thor' \ 103'check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1' 104 105test_expect_success \ 106'an incomplete line added' \ 107'echo "incomplete" | tr -d "\\012" >>file && 108 GIT_AUTHOR_NAME="C" git commit -a -m "Incomplete"' 109 110test_expect_success \ 111'With incomplete lines.' \ 112'check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1' 113 114test_expect_success \ 115'some edit' \ 116'mv file file.orig && 117 { 118 cat file.orig && 119 echo 120 } | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" > file && 121 echo "incomplete" | tr -d "\\012" >>file && 122 GIT_AUTHOR_NAME="D" git commit -a -m "edit"' 123 124test_expect_success \ 125'some edit' \ 126'check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1'