f4609b896f
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
138 lines
4.9 KiB
Bash
Executable file
138 lines
4.9 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2019 Denton Liu
|
|
#
|
|
|
|
test_description='ensure rebase fast-forwards commits when possible'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
test_commit A &&
|
|
test_commit B &&
|
|
test_commit C &&
|
|
test_commit D &&
|
|
git checkout -t -b side
|
|
'
|
|
|
|
test_rebase_same_head () {
|
|
status_n="$1" &&
|
|
shift &&
|
|
what_n="$1" &&
|
|
shift &&
|
|
cmp_n="$1" &&
|
|
shift &&
|
|
status_f="$1" &&
|
|
shift &&
|
|
what_f="$1" &&
|
|
shift &&
|
|
cmp_f="$1" &&
|
|
shift &&
|
|
test_rebase_same_head_ $status_n $what_n $cmp_n 0 " --apply" "$*" &&
|
|
test_rebase_same_head_ $status_f $what_f $cmp_f 0 " --apply --no-ff" "$*"
|
|
test_rebase_same_head_ $status_n $what_n $cmp_n 0 " --merge" "$*" &&
|
|
test_rebase_same_head_ $status_f $what_f $cmp_f 0 " --merge --no-ff" "$*"
|
|
test_rebase_same_head_ $status_n $what_n $cmp_n 1 " --merge" "$*" &&
|
|
test_rebase_same_head_ $status_f $what_f $cmp_f 1 " --merge --no-ff" "$*"
|
|
}
|
|
|
|
test_rebase_same_head_ () {
|
|
status="$1" &&
|
|
shift &&
|
|
what="$1" &&
|
|
shift &&
|
|
cmp="$1" &&
|
|
shift &&
|
|
abbreviate="$1" &&
|
|
shift &&
|
|
flag="$1"
|
|
shift &&
|
|
if test $abbreviate -eq 1
|
|
then
|
|
msg="git rebase$flag $* (rebase.abbreviateCommands = true) with $changes is $what with $cmp HEAD"
|
|
else
|
|
msg="git rebase$flag $* with $changes is $what with $cmp HEAD"
|
|
fi &&
|
|
test_expect_$status "$msg" "
|
|
if test $abbreviate -eq 1
|
|
then
|
|
test_config rebase.abbreviateCommands true
|
|
fi &&
|
|
oldhead=\$(git rev-parse HEAD) &&
|
|
test_when_finished 'git reset --hard \$oldhead' &&
|
|
git reflog HEAD >expect &&
|
|
git rebase$flag $* >stdout &&
|
|
git reflog HEAD >actual &&
|
|
if test $what = work
|
|
then
|
|
old=\$(wc -l <expect) &&
|
|
test_line_count '-gt' \$old actual
|
|
elif test $what = noop
|
|
then
|
|
test_cmp expect actual
|
|
fi &&
|
|
newhead=\$(git rev-parse HEAD) &&
|
|
if test $cmp = same
|
|
then
|
|
test_cmp_rev \$oldhead \$newhead
|
|
elif test $cmp = diff
|
|
then
|
|
test_cmp_rev ! \$oldhead \$newhead
|
|
fi
|
|
"
|
|
}
|
|
|
|
changes='no changes'
|
|
test_rebase_same_head success noop same success work same
|
|
test_rebase_same_head success noop same success work same master
|
|
test_rebase_same_head success noop same success work diff --onto B B
|
|
test_rebase_same_head success noop same success work diff --onto B... B
|
|
test_rebase_same_head success noop same success work same --onto master... master
|
|
test_rebase_same_head success noop same success work same --keep-base master
|
|
test_rebase_same_head success noop same success work same --keep-base
|
|
test_rebase_same_head success noop same success work same --no-fork-point
|
|
test_rebase_same_head success noop same success work same --keep-base --no-fork-point
|
|
test_rebase_same_head success noop same success work same --fork-point master
|
|
test_rebase_same_head success noop same success work diff --fork-point --onto B B
|
|
test_rebase_same_head success noop same success work diff --fork-point --onto B... B
|
|
test_rebase_same_head success noop same success work same --fork-point --onto master... master
|
|
test_rebase_same_head success noop same success work same --keep-base --keep-base master
|
|
|
|
test_expect_success 'add work same to side' '
|
|
test_commit E
|
|
'
|
|
|
|
changes='our changes'
|
|
test_rebase_same_head success noop same success work same
|
|
test_rebase_same_head success noop same success work same master
|
|
test_rebase_same_head success noop same success work diff --onto B B
|
|
test_rebase_same_head success noop same success work diff --onto B... B
|
|
test_rebase_same_head success noop same success work same --onto master... master
|
|
test_rebase_same_head success noop same success work same --keep-base master
|
|
test_rebase_same_head success noop same success work same --keep-base
|
|
test_rebase_same_head success noop same success work same --no-fork-point
|
|
test_rebase_same_head success noop same success work same --keep-base --no-fork-point
|
|
test_rebase_same_head success noop same success work same --fork-point master
|
|
test_rebase_same_head success noop same success work diff --fork-point --onto B B
|
|
test_rebase_same_head success noop same success work diff --fork-point --onto B... B
|
|
test_rebase_same_head success noop same success work same --fork-point --onto master... master
|
|
test_rebase_same_head success noop same success work same --fork-point --keep-base master
|
|
|
|
test_expect_success 'add work same to upstream' '
|
|
git checkout master &&
|
|
test_commit F &&
|
|
git checkout side
|
|
'
|
|
|
|
changes='our and their changes'
|
|
test_rebase_same_head success noop same success work diff --onto B B
|
|
test_rebase_same_head success noop same success work diff --onto B... B
|
|
test_rebase_same_head success noop same success work diff --onto master... master
|
|
test_rebase_same_head success noop same success work diff --keep-base master
|
|
test_rebase_same_head success noop same success work diff --keep-base
|
|
test_rebase_same_head failure work same success work diff --fork-point --onto B B
|
|
test_rebase_same_head failure work same success work diff --fork-point --onto B... B
|
|
test_rebase_same_head success noop same success work diff --fork-point --onto master... master
|
|
test_rebase_same_head success noop same success work diff --fork-point --keep-base master
|
|
|
|
test_done
|