1#!/bin/sh 2# 3# Copyright (c) 2019 Denton Liu 4# 5 6test_description='ensure rebase fast-forwards commits when possible' 7 8. ./test-lib.sh 9 10test_expect_success setup ' 11 test_commit A && 12 test_commit B && 13 test_commit C && 14 test_commit D && 15 git checkout -t -b side 16' 17 18test_rebase_same_head () { 19 status_n="$1"&& 20shift&& 21 what_n="$1"&& 22shift&& 23 cmp_n="$1"&& 24shift&& 25 status_f="$1"&& 26shift&& 27 what_f="$1"&& 28shift&& 29 cmp_f="$1"&& 30shift&& 31 test_rebase_same_head_ $status_n $what_n $cmp_n"""$*"&& 32 test_rebase_same_head_ $status_f $what_f $cmp_f" --no-ff""$*" 33} 34 35test_rebase_same_head_ () { 36 status="$1"&& 37shift&& 38 what="$1"&& 39shift&& 40cmp="$1"&& 41shift&& 42 flag="$1" 43shift&& 44 test_expect_$status"git rebase$flag$* with$changesis$whatwith$cmpHEAD"" 45 oldhead=\$(git rev-parse HEAD)&& 46 test_when_finished 'git reset --hard \$oldhead' && 47 git rebase$flag$* >stdout && 48 if test$what= work 49 then 50 # Must check this case first, for 'is up to 51 # date, rebase forced[...]rewinding head' cases 52 test_i18ngrep 'rewinding head' stdout 53 elif test$what= noop 54 then 55 test_i18ngrep 'is up to date' stdout && 56 test_i18ngrep ! 'rebase forced' stdout 57 elif test$what= noop-force 58 then 59 test_i18ngrep 'is up to date, rebase forced' stdout 60 fi && 61 newhead=\$(git rev-parse HEAD)&& 62 if test$cmp= same 63 then 64 test_cmp_rev \$oldhead\$newhead 65 elif test$cmp= diff 66 then 67 ! test_cmp_rev \$oldhead\$newhead 68 fi 69 " 70} 71 72changes='no changes' 73test_rebase_same_head success work same success work same 74test_rebase_same_head success noop same success noop-force same master 75test_rebase_same_head success noop same success noop-forcediff--onto B B 76test_rebase_same_head success noop same success noop-forcediff--onto B... B 77test_rebase_same_head success noop same success noop-force same --onto master... master 78test_rebase_same_head success noop same success noop-force same --no-fork-point 79test_rebase_same_head success work same success work same --fork-point master 80test_rebase_same_head failure noop same success work diff--fork-point --onto B B 81test_rebase_same_head failure work same success work diff--fork-point --onto B... B 82test_rebase_same_head success work same success work same --fork-point --onto master... master 83 84test_expect_success 'add work same to side'' 85 test_commit E 86' 87 88changes='our changes' 89test_rebase_same_head success work same success work same 90test_rebase_same_head success noop same success noop-force same master 91test_rebase_same_head success noop same success noop-forcediff--onto B B 92test_rebase_same_head success noop same success noop-forcediff--onto B... B 93test_rebase_same_head success noop same success noop-force same --onto master... master 94test_rebase_same_head success noop same success noop-force same --no-fork-point 95test_rebase_same_head success work same success work same --fork-point master 96test_rebase_same_head failure work same success work diff--fork-point --onto B B 97test_rebase_same_head failure work same success work diff--fork-point --onto B... B 98test_rebase_same_head success work same success work same --fork-point --onto master... master 99 100test_expect_success 'add work same to upstream'' 101 git checkout master && 102 test_commit F && 103 git checkout side 104' 105 106changes='our and their changes' 107test_rebase_same_head success noop same success noop-forcediff--onto B B 108test_rebase_same_head success noop same success noop-forcediff--onto B... B 109test_rebase_same_head failure work same success work diff--onto master... master 110test_rebase_same_head failure work same success work diff--fork-point --onto B B 111test_rebase_same_head failure work same success work diff--fork-point --onto B... B 112test_rebase_same_head failure work same success work diff--fork-point --onto master... master 113 114test_done