Skip to content

Commit 5b5e1c7

Browse files
martinvonzgitster
authored andcommitted
add tests for rebasing with patch-equivalence present
Signed-off-by: Martin von Zweigbergk <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 2aad7ca commit 5b5e1c7

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

t/lib-rebase.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,20 @@ reset_rebase () {
8181
git reset --hard &&
8282
git clean -f
8383
}
84+
85+
cherry_pick () {
86+
git cherry-pick -n "$2" &&
87+
git commit -m "$1" &&
88+
git tag "$1"
89+
}
90+
91+
revert () {
92+
git revert -n "$2" &&
93+
git commit -m "$1" &&
94+
git tag "$1"
95+
}
96+
97+
make_empty () {
98+
git commit --allow-empty -m "$1" &&
99+
git tag "$1"
100+
}

t/t3421-rebase-topology-linear.sh

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,89 @@ test_run_rebase success -m
7575
test_run_rebase success -i
7676
test_run_rebase success -p
7777

78+
# f
79+
# /
80+
# a---b---c---g---h
81+
# \
82+
# d---G---i
83+
#
84+
# uppercase = cherry-picked
85+
# h = reverted g
86+
#
87+
# Reverted patches are there for tests to be able to check if a commit
88+
# that introduced the same change as another commit is
89+
# dropped. Without reverted commits, we could get false positives
90+
# because applying the patch succeeds, but simply results in no
91+
# changes.
92+
test_expect_success 'setup of linear history for range selection tests' '
93+
git checkout c &&
94+
test_commit g &&
95+
revert h g &&
96+
git checkout d &&
97+
cherry_pick G g &&
98+
test_commit i &&
99+
git checkout b &&
100+
test_commit f
101+
'
102+
103+
test_run_rebase () {
104+
result=$1
105+
shift
106+
test_expect_$result "rebase $* drops patches in upstream" "
107+
reset_rebase &&
108+
git rebase $* h i &&
109+
test_cmp_rev h HEAD~2 &&
110+
test_linear_range 'd i' h..
111+
"
112+
}
113+
test_run_rebase success ''
114+
test_run_rebase failure -m
115+
test_run_rebase success -i
116+
test_run_rebase success -p
117+
118+
test_run_rebase () {
119+
result=$1
120+
shift
121+
test_expect_$result "rebase $* can drop last patch if in upstream" "
122+
reset_rebase &&
123+
git rebase $* h G &&
124+
test_cmp_rev h HEAD^ &&
125+
test_linear_range 'd' h..
126+
"
127+
}
128+
test_run_rebase success ''
129+
test_run_rebase failure -m
130+
test_run_rebase success -i
131+
test_run_rebase success -p
132+
133+
test_run_rebase () {
134+
result=$1
135+
shift
136+
test_expect_$result "rebase $* --onto drops patches in upstream" "
137+
reset_rebase &&
138+
git rebase $* --onto f h i &&
139+
test_cmp_rev f HEAD~2 &&
140+
test_linear_range 'd i' f..
141+
"
142+
}
143+
test_run_rebase success ''
144+
test_run_rebase failure -m
145+
test_run_rebase success -i
146+
test_run_rebase success -p
147+
148+
test_run_rebase () {
149+
result=$1
150+
shift
151+
test_expect_$result "rebase $* --onto does not drop patches in onto" "
152+
reset_rebase &&
153+
git rebase $* --onto h f i &&
154+
test_cmp_rev h HEAD~3 &&
155+
test_linear_range 'd G i' h..
156+
"
157+
}
158+
test_run_rebase success ''
159+
test_run_rebase success -m
160+
test_run_rebase success -i
161+
test_run_rebase success -p
162+
78163
test_done

0 commit comments

Comments
 (0)