This backend has been deprecated in favor of `git rebase --rebase-merges`. In preparation for dropping it, let's remove all the regression tests that would need it. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Reviewed-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			360 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='basic rebase topology tests'
 | 
						|
. ./test-lib.sh
 | 
						|
. "$TEST_DIRECTORY"/lib-rebase.sh
 | 
						|
 | 
						|
# a---b---c
 | 
						|
#      \
 | 
						|
#       d---e
 | 
						|
test_expect_success 'setup' '
 | 
						|
	test_commit a &&
 | 
						|
	test_commit b &&
 | 
						|
	test_commit c &&
 | 
						|
	git checkout b &&
 | 
						|
	test_commit d &&
 | 
						|
	test_commit e
 | 
						|
'
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "simple rebase $*" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* c e &&
 | 
						|
		test_cmp_rev c HEAD~2 &&
 | 
						|
		test_linear_range 'd e' c..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_expect_success 'setup branches and remote tracking' '
 | 
						|
	git tag -l >tags &&
 | 
						|
	for tag in $(cat tags)
 | 
						|
	do
 | 
						|
		git branch branch-$tag $tag || return 1
 | 
						|
	done &&
 | 
						|
	git remote add origin "file://$PWD" &&
 | 
						|
	git fetch origin
 | 
						|
'
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* is no-op if upstream is an ancestor" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* b e &&
 | 
						|
		test_cmp_rev e HEAD
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* -f rewrites even if upstream is an ancestor" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* -f b e &&
 | 
						|
		test_cmp_rev ! e HEAD &&
 | 
						|
		test_cmp_rev b HEAD~2 &&
 | 
						|
		test_linear_range 'd e' b..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success --fork-point
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* -f rewrites even if remote upstream is an ancestor" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* -f branch-b branch-e &&
 | 
						|
		test_cmp_rev ! branch-e origin/branch-e &&
 | 
						|
		test_cmp_rev branch-b HEAD~2 &&
 | 
						|
		test_linear_range 'd e' branch-b..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success --fork-point
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* fast-forwards from ancestor of upstream" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* e b &&
 | 
						|
		test_cmp_rev e HEAD
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success --fork-point
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
#       f
 | 
						|
#      /
 | 
						|
# a---b---c---g---h
 | 
						|
#      \
 | 
						|
#       d---gp--i
 | 
						|
#
 | 
						|
# gp = cherry-picked g
 | 
						|
# h = reverted g
 | 
						|
#
 | 
						|
# Reverted patches are there for tests to be able to check if a commit
 | 
						|
# that introduced the same change as another commit is
 | 
						|
# dropped. Without reverted commits, we could get false positives
 | 
						|
# because applying the patch succeeds, but simply results in no
 | 
						|
# changes.
 | 
						|
test_expect_success 'setup of linear history for range selection tests' '
 | 
						|
	git checkout c &&
 | 
						|
	test_commit g &&
 | 
						|
	revert h g &&
 | 
						|
	git checkout d &&
 | 
						|
	cherry_pick gp g &&
 | 
						|
	test_commit i &&
 | 
						|
	git checkout b &&
 | 
						|
	test_commit f
 | 
						|
'
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* drops patches in upstream" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* h i &&
 | 
						|
		test_cmp_rev h HEAD~2 &&
 | 
						|
		test_linear_range 'd i' h..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* can drop last patch if in upstream" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* h gp &&
 | 
						|
		test_cmp_rev h HEAD^ &&
 | 
						|
		test_linear_range 'd' h..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --onto drops patches in upstream" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --onto f h i &&
 | 
						|
		test_cmp_rev f HEAD~2 &&
 | 
						|
		test_linear_range 'd i' f..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --onto does not drop patches in onto" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --onto h f i &&
 | 
						|
		test_cmp_rev h HEAD~3 &&
 | 
						|
		test_linear_range 'd gp i' h..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
# a---b---c---j!
 | 
						|
#      \
 | 
						|
#       d---k!--l
 | 
						|
#
 | 
						|
# ! = empty
 | 
						|
test_expect_success 'setup of linear history for empty commit tests' '
 | 
						|
	git checkout c &&
 | 
						|
	make_empty j &&
 | 
						|
	git checkout d &&
 | 
						|
	make_empty k &&
 | 
						|
	test_commit l
 | 
						|
'
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* keeps begin-empty commits" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* j l &&
 | 
						|
		test_cmp_rev c HEAD~4 &&
 | 
						|
		test_linear_range 'j d k l' c..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase failure --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --no-keep-empty drops begin-empty commits" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --no-keep-empty c l &&
 | 
						|
		test_cmp_rev c HEAD~2 &&
 | 
						|
		test_linear_range 'd l' c..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --keep-empty keeps empty even if already in upstream" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --keep-empty j l &&
 | 
						|
		test_cmp_rev j HEAD~3 &&
 | 
						|
		test_linear_range 'd k l' j..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
test_run_rebase success --rebase-merges
 | 
						|
 | 
						|
#       m
 | 
						|
#      /
 | 
						|
# a---b---c---g
 | 
						|
#
 | 
						|
# x---y---bp
 | 
						|
#
 | 
						|
# bp = cherry-picked b
 | 
						|
# m = reverted b
 | 
						|
#
 | 
						|
# Reverted patches are there for tests to be able to check if a commit
 | 
						|
# that introduced the same change as another commit is
 | 
						|
# dropped. Without reverted commits, we could get false positives
 | 
						|
# because applying the patch succeeds, but simply results in no
 | 
						|
# changes.
 | 
						|
test_expect_success 'setup of linear history for test involving root' '
 | 
						|
	git checkout b &&
 | 
						|
	revert m b &&
 | 
						|
	git checkout --orphan disjoint &&
 | 
						|
	git rm -rf . &&
 | 
						|
	test_commit x &&
 | 
						|
	test_commit y &&
 | 
						|
	cherry_pick bp b
 | 
						|
'
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --onto --root" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --onto c --root y &&
 | 
						|
		test_cmp_rev c HEAD~2 &&
 | 
						|
		test_linear_range 'x y' c..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* without --onto --root with disjoint history" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* c y &&
 | 
						|
		test_cmp_rev c HEAD~2 &&
 | 
						|
		test_linear_range 'x y' c..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --onto --root drops patch in onto" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --onto m --root bp &&
 | 
						|
		test_cmp_rev m HEAD~2 &&
 | 
						|
		test_linear_range 'x y' m..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --onto --root with merge-base does not go to root" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --onto m --root g &&
 | 
						|
		test_cmp_rev m HEAD~2 &&
 | 
						|
		test_linear_range 'c g' m..
 | 
						|
	"
 | 
						|
}
 | 
						|
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* without --onto --root with disjoint history drops patch in onto" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* m bp &&
 | 
						|
		test_cmp_rev m HEAD~2 &&
 | 
						|
		test_linear_range 'x y' m..
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success --apply
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* --root on linear history is a no-op" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* --root c &&
 | 
						|
		test_cmp_rev c HEAD
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success ''
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_run_rebase () {
 | 
						|
	result=$1
 | 
						|
	shift
 | 
						|
	test_expect_$result "rebase $* -f --root on linear history causes re-write" "
 | 
						|
		reset_rebase &&
 | 
						|
		git rebase $* -f --root c &&
 | 
						|
		test_cmp_rev ! a HEAD~2 &&
 | 
						|
		test_linear_range 'a b c' HEAD
 | 
						|
	"
 | 
						|
}
 | 
						|
test_run_rebase success ''
 | 
						|
test_run_rebase success -m
 | 
						|
test_run_rebase success -i
 | 
						|
 | 
						|
test_done
 |