X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=t%2Fannotate-tests.sh;h=114938c3ff18fadb130e6809fc14e89cfe3f36f2;hb=481176f752f204316ec570c8ab3fdf0c297b3259;hp=54a4dfb9f4e78aa6a49e024d6577ccb8223ce735;hpb=8752d11d60e8f48b6e242e7f504c8e8fd7eabb92;p=git.git diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index 54a4dfb9..114938c3 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -1,6 +1,37 @@ # This file isn't used as a test script directly, instead it is # sourced from t8001-annotate.sh and t8001-blame.sh. +check_count () { + head= + case "$1" in -h) head="$2"; shift; shift ;; esac + $PROG file $head | perl -e ' + my %expect = (@ARGV); + my %count = (); + while () { + if (/^[0-9a-f]+\t\(([^\t]+)\t/) { + my $author = $1; + for ($author) { s/^\s*//; s/\s*$//; } + if (exists $expect{$author}) { + $count{$author}++; + } + } + } + my $bad = 0; + while (my ($author, $count) = each %count) { + my $ok; + if ($expect{$author} != $count) { + $bad = 1; + $ok = "bad"; + } + else { + $ok = "good"; + } + print STDERR "Author $author (expected $expect{$author}, attributed $count) $ok\n"; + } + exit($bad); + ' "$@" +} + test_expect_success \ 'prepare reference tree' \ 'echo "1A quick brown fox jumps over the" >file && @@ -10,7 +41,7 @@ test_expect_success \ test_expect_success \ 'check all lines blamed on A' \ - '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]' + 'check_count A 2' test_expect_success \ 'Setup new lines blamed on B' \ @@ -19,12 +50,8 @@ test_expect_success \ GIT_AUTHOR_NAME="B" git commit -a -m "Second."' test_expect_success \ - 'Two lines blamed on A' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "A") == 2 ]' - -test_expect_success \ - 'Two lines blamed on B' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "B") == 2 ]' + 'Two lines blamed on A, two on B' \ + 'check_count A 2 B 2' test_expect_success \ 'merge-setup part 1' \ @@ -34,16 +61,8 @@ test_expect_success \ GIT_AUTHOR_NAME="B1" git commit -a -m "Branch1-1"' test_expect_success \ - 'Two lines blamed on A' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]' - -test_expect_success \ - 'Two lines blamed on B' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 2 ]' - -test_expect_success \ - 'Two lines blamed on B1' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B1$") == 2 ]' + 'Two lines blamed on A, two on B, two on B1' \ + 'check_count A 2 B 2 B1 2' test_expect_success \ 'merge-setup part 2' \ @@ -53,34 +72,50 @@ test_expect_success \ GIT_AUTHOR_NAME="B2" git commit -a -m "Branch2-1"' test_expect_success \ - 'Two lines blamed on A' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]' + 'Two lines blamed on A, one on B, one on B2' \ + 'check_count A 2 B 1 B2 1' + +test_expect_success \ + 'merge-setup part 3' \ + 'git pull . branch1' + +test_expect_success \ + 'Two lines blamed on A, one on B, two on B1, one on B2' \ + 'check_count A 2 B 1 B1 2 B2 1' test_expect_success \ - 'One line blamed on B' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 1 ]' + 'Annotating an old revision works' \ + 'check_count -h master A 2 B 2' test_expect_success \ - 'One line blamed on B2' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B2$") == 1 ]' + 'Annotating an old revision works' \ + 'check_count -h master^ A 2' +test_expect_success \ + 'merge-setup part 4' \ + 'echo "evil merge." >>file && + EDITOR=: VISUAL=: git commit -a --amend' test_expect_success \ - 'merge-setup part 3' \ - 'git pull . branch1' + 'Two lines blamed on A, one on B, two on B1, one on B2, one on A U Thor' \ + 'check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1' test_expect_success \ - 'Two lines blamed on A' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]' + 'an incomplete line added' \ + 'echo "incomplete" | tr -d "\\012" >>file && + GIT_AUTHOR_NAME="C" git commit -a -m "Incomplete"' test_expect_success \ - 'One line blamed on B' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 1 ]' + 'With incomplete lines.' \ + 'check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1' test_expect_success \ - 'Two lines blamed on B1' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B1$") == 2 ]' + 'some edit' \ + 'mv file file1 && + sed -e 1d -e "5s/3A/99/" file1 >file && + rm -f file1 && + GIT_AUTHOR_NAME="D" git commit -a -m "edit"' test_expect_success \ - 'One line blamed on B2' \ - '[ $($PROG file | awk "{print \$3}" | grep -c "^B2$") == 1 ]' + 'some edit' \ + 'check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1'