t / t6001-rev-list-merge-order.shon commit [PATCH] Anal retentive 'const unsigned char *sha1' (5d6ccf5)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Jon Seymour
   4#
   5
   6test_description='Test rev-list --merge-order
   7'
   8. ./test-lib.sh
   9
  10function do_commit
  11{
  12    git-commit-tree "$@" </dev/null
  13}
  14
  15function check_adjacency
  16{
  17    read previous
  18    echo "= $previous"
  19    while read next
  20    do
  21        if ! (git-cat-file commit $previous | grep "^parent $next" >/dev/null)
  22        then
  23            echo "^ $next"
  24        else
  25            echo "| $next"
  26        fi
  27        previous=$next
  28    done
  29}
  30
  31function sed_script
  32{
  33   for c in root a0 a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 l0 l1 l2 l3 l4 l5
  34   do
  35       echo -n "s/${!c}/$c/;"
  36   done
  37}
  38
  39date >path0
  40git-update-cache --add path0
  41tree=$(git-write-tree)
  42root=$(do_commit $tree 2>/dev/null)
  43export GIT_COMMITTER_NAME=foobar  # to guarantee that the commit is different
  44l0=$(do_commit $tree -p $root)
  45l1=$(do_commit $tree -p $l0)
  46l2=$(do_commit $tree -p $l1)
  47a0=$(do_commit $tree -p $l2)
  48a1=$(do_commit $tree -p $a0)
  49export GIT_COMMITTER_NAME=foobar2 # to guarantee that the commit is different
  50b1=$(do_commit $tree -p $a0)
  51c1=$(do_commit $tree -p $b1)
  52export GIT_COMMITTER_NAME=foobar3 # to guarantee that the commit is different
  53b2=$(do_commit $tree -p $b1)
  54b3=$(do_commit $tree -p $b2)
  55c2=$(do_commit $tree -p $c1 -p $b2)
  56c3=$(do_commit $tree -p $c2)
  57a2=$(do_commit $tree -p $a1)
  58a3=$(do_commit $tree -p $a2)
  59b4=$(do_commit $tree -p $b3 -p $a3)
  60a4=$(do_commit $tree -p $a3 -p $b4 -p $c3)
  61l3=$(do_commit $tree -p $a4)
  62l4=$(do_commit $tree -p $l3)
  63l5=$(do_commit $tree -p $l4)
  64echo $l5 > .git/HEAD
  65
  66git-rev-list --merge-order --show-breaks HEAD | sed "$(sed_script)" > actual-merge-order
  67cat > expected-merge-order <<EOF
  68= l5
  69| l4
  70| l3
  71= a4
  72| c3
  73| c2
  74| c1
  75^ b4
  76| b3
  77| b2
  78| b1
  79^ a3
  80| a2
  81| a1
  82= a0
  83| l2
  84| l1
  85| l0
  86= root
  87EOF
  88
  89git-rev-list HEAD | check_adjacency | sed "$(sed_script)" > actual-default-order
  90normal_adjacency_count=$(git-rev-list HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
  91merge_order_adjacency_count=$(git-rev-list --merge-order HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
  92
  93test_expect_success 'Testing that the rev-list has correct number of entries' '[ $(git-rev-list HEAD | wc -l) -eq 19 ]'
  94test_expect_success 'Testing that --merge-order produces the correct result' 'diff expected-merge-order actual-merge-order'
  95test_expect_success 'Testing that --merge-order produces as many or fewer discontinuities' '[ $merge_order_adjacency_count -le $normal_adjacency_count ]'
  96
  97cat > expected-merge-order-1 <<EOF
  98c3
  99c2
 100c1
 101b3
 102b2
 103b1
 104a3
 105a2
 106a1
 107a0
 108l2
 109l1
 110l0
 111root
 112EOF
 113
 114git-rev-list --merge-order $a3 $b3 $c3 | sed "$(sed_script)" > actual-merge-order-1
 115test_expect_success 'Testing multiple heads' 'diff expected-merge-order-1 actual-merge-order-1'
 116
 117cat > expected-merge-order-2 <<EOF
 118c3
 119c2
 120c1
 121b3
 122b2
 123b1
 124a3
 125a2
 126EOF
 127
 128git-rev-list --merge-order $a3 $b3 $c3 ^$a1 | sed "$(sed_script)" > actual-merge-order-2
 129test_expect_success 'Testing stop' 'diff expected-merge-order-2 actual-merge-order-2'
 130
 131cat > expected-merge-order-3 <<EOF
 132c3
 133c2
 134c1
 135b3
 136b2
 137b1
 138a3
 139a2
 140a1
 141a0
 142l2
 143EOF
 144
 145git-rev-list --merge-order $a3 $b3 $c3 ^$l1 | sed "$(sed_script)" > actual-merge-order-3
 146test_expect_success 'Testing stop in linear epoch' 'diff expected-merge-order-3 actual-merge-order-3'
 147
 148cat > expected-merge-order-4 <<EOF
 149l5
 150l4
 151l3
 152a4
 153c3
 154c2
 155c1
 156b4
 157b3
 158b2
 159b1
 160a3
 161a2
 162a1
 163a0
 164l2
 165EOF
 166
 167git-rev-list --merge-order $l5 ^$l1 | sed "$(sed_script)" > actual-merge-order-4
 168test_expect_success 'Testing start in linear epoch, stop after non-linear epoch' 'diff expected-merge-order-4 actual-merge-order-4'
 169
 170git-rev-list --merge-order $l5 $l5 ^$l1 2>/dev/null | sed "$(sed_script)" > actual-merge-order-5
 171test_expect_success 'Testing duplicated start arguments' 'diff expected-merge-order-4 actual-merge-order-5'
 172
 173test_expect_success 'Testing exclusion near merge' 'git-rev-list --merge-order $a4 ^$c3 2>/dev/null'
 174
 175test_done