t / annotate-tests.shon commit tests: document cherry-pick behavior in face of conflicts (6a84334)
   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 () {
   5        head=
   6        case "$1" in -h) head="$2"; shift; shift ;; esac
   7        echo "$PROG file $head" >&4
   8        $PROG file $head >.result || return 1
   9        cat .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'