t / t3419-rebase-patch-id.shon commit test-reach: test get_merge_bases_many (324dec0)
   1#!/bin/sh
   2
   3test_description='git rebase - test patch id computation'
   4
   5. ./test-lib.sh
   6
   7count () {
   8        i=0
   9        while test $i -lt $1
  10        do
  11                echo "$i"
  12                i=$(($i+1))
  13        done
  14}
  15
  16scramble () {
  17        i=0
  18        while read x
  19        do
  20                if test $i -ne 0
  21                then
  22                        echo "$x"
  23                fi
  24                i=$((($i+1) % 10))
  25        done <"$1" >"$1.new"
  26        mv -f "$1.new" "$1"
  27}
  28
  29run () {
  30        echo \$ "$@"
  31        /usr/bin/time "$@" >/dev/null
  32}
  33
  34test_expect_success 'setup' '
  35        git commit --allow-empty -m initial &&
  36        git tag root
  37'
  38
  39do_tests () {
  40        nlines=$1 pr=${2-}
  41
  42        test_expect_success $pr "setup: $nlines lines" "
  43                rm -f .gitattributes &&
  44                git checkout -q -f master &&
  45                git reset --hard root &&
  46                count $nlines >file &&
  47                git add file &&
  48                git commit -q -m initial &&
  49                git branch -f other &&
  50
  51                scramble file &&
  52                git add file &&
  53                git commit -q -m 'change big file' &&
  54
  55                git checkout -q other &&
  56                : >newfile &&
  57                git add newfile &&
  58                git commit -q -m 'add small file' &&
  59
  60                git cherry-pick master >/dev/null 2>&1
  61        "
  62
  63        test_debug "
  64                run git diff master^\!
  65        "
  66
  67        test_expect_success $pr 'setup attributes' "
  68                echo 'file binary' >.gitattributes
  69        "
  70
  71        test_debug "
  72                run git format-patch --stdout master &&
  73                run git format-patch --stdout --ignore-if-in-upstream master
  74        "
  75
  76        test_expect_success $pr 'detect upstream patch' '
  77                git checkout -q master &&
  78                scramble file &&
  79                git add file &&
  80                git commit -q -m "change big file again" &&
  81                git checkout -q other^{} &&
  82                git rebase master &&
  83                test_must_fail test -n "$(git rev-list master...HEAD~)"
  84        '
  85
  86        test_expect_success $pr 'do not drop patch' '
  87                git branch -f squashed master &&
  88                git checkout -q -f squashed &&
  89                git reset -q --soft HEAD~2 &&
  90                git commit -q -m squashed &&
  91                git checkout -q other^{} &&
  92                test_must_fail git rebase squashed &&
  93                rm -rf .git/rebase-apply
  94        '
  95}
  96
  97do_tests 500
  98do_tests 50000 EXPENSIVE
  99
 100test_done