t / t6012-rev-list-simplify.shon commit add tests for rebasing of empty commits (00b8be5)
   1#!/bin/sh
   2
   3test_description='merge simplification'
   4
   5. ./test-lib.sh
   6
   7note () {
   8        git tag "$1"
   9}
  10
  11unnote () {
  12        git name-rev --tags --stdin | sed -e "s|$_x40 (tags/\([^)]*\)) |\1 |g"
  13}
  14
  15test_expect_success setup '
  16        echo "Hi there" >file &&
  17        git add file &&
  18        test_tick && git commit -m "Initial file" &&
  19        note A &&
  20
  21        git branch other-branch &&
  22
  23        echo "Hello" >file &&
  24        git add file &&
  25        test_tick && git commit -m "Modified file" &&
  26        note B &&
  27
  28        git checkout other-branch &&
  29
  30        echo "Hello" >file &&
  31        git add file &&
  32        test_tick && git commit -m "Modified the file identically" &&
  33        note C &&
  34
  35        echo "This is a stupid example" >another-file &&
  36        git add another-file &&
  37        test_tick && git commit -m "Add another file" &&
  38        note D &&
  39
  40        test_tick && git merge -m "merge" master &&
  41        note E &&
  42
  43        echo "Yet another" >elif &&
  44        git add elif &&
  45        test_tick && git commit -m "Irrelevant change" &&
  46        note F &&
  47
  48        git checkout master &&
  49        echo "Yet another" >elif &&
  50        git add elif &&
  51        test_tick && git commit -m "Another irrelevant change" &&
  52        note G &&
  53
  54        test_tick && git merge -m "merge" other-branch &&
  55        note H &&
  56
  57        echo "Final change" >file &&
  58        test_tick && git commit -a -m "Final change" &&
  59        note I &&
  60
  61        git symbolic-ref HEAD refs/heads/unrelated &&
  62        git rm -f "*" &&
  63        echo "Unrelated branch" >side &&
  64        git add side &&
  65        test_tick && git commit -m "Side root" &&
  66        note J &&
  67
  68        git checkout master &&
  69        test_tick && git merge -m "Coolest" unrelated &&
  70        note K &&
  71
  72        echo "Immaterial" >elif &&
  73        git add elif &&
  74        test_tick && git commit -m "Last" &&
  75        note L
  76'
  77
  78FMT='tformat:%P         %H | %s'
  79
  80check_outcome () {
  81        outcome=$1
  82        shift
  83        for c in $1
  84        do
  85                echo "$c"
  86        done >expect &&
  87        shift &&
  88        param="$*" &&
  89        test_expect_$outcome "log $param" '
  90                git log --pretty="$FMT" --parents $param |
  91                unnote >actual &&
  92                sed -e "s/^.*   \([^ ]*\) .*/\1/" >check <actual &&
  93                test_cmp expect check || {
  94                        cat actual
  95                        false
  96                }
  97        '
  98}
  99
 100check_result () {
 101        check_outcome success "$@"
 102}
 103
 104check_result 'L K J I H G F E D C B A' --full-history
 105check_result 'K I H E C B A' --full-history -- file
 106check_result 'K I H E C B A' --full-history --topo-order -- file
 107check_result 'K I H E C B A' --full-history --date-order -- file
 108check_outcome failure 'I E C B A' --simplify-merges -- file
 109check_result 'I B A' -- file
 110check_result 'I B A' --topo-order -- file
 111check_result 'H' --first-parent -- another-file
 112
 113test_done