Skip to content

Commit d887cc1

Browse files
committed
t5533: test "push --force-with-lease"
Prepare two repositories, src and dst, the latter of which is a clone of the former (with tracking branches), and push from the latter into the former, with various --force-with-lease options. Signed-off-by: Junio C Hamano <[email protected]>
1 parent 631b5ef commit d887cc1

File tree

1 file changed

+189
-0
lines changed

1 file changed

+189
-0
lines changed

t/t5533-push-cas.sh

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
#!/bin/sh
2+
3+
test_description='compare & swap push force/delete safety'
4+
5+
. ./test-lib.sh
6+
7+
setup_srcdst_basic () {
8+
rm -fr src dst &&
9+
git clone --no-local . src &&
10+
git clone --no-local src dst &&
11+
(
12+
cd src && git checkout HEAD^0
13+
)
14+
}
15+
16+
test_expect_success setup '
17+
: create template repository
18+
test_commit A &&
19+
test_commit B &&
20+
test_commit C
21+
'
22+
23+
test_expect_success 'push to update (protected)' '
24+
setup_srcdst_basic &&
25+
(
26+
cd dst &&
27+
test_commit D &&
28+
test_must_fail git push --force-with-lease=master:master origin master
29+
) &&
30+
git ls-remote . refs/heads/master >expect &&
31+
git ls-remote src refs/heads/master >actual &&
32+
test_cmp expect actual
33+
'
34+
35+
test_expect_success 'push to update (protected, forced)' '
36+
setup_srcdst_basic &&
37+
(
38+
cd dst &&
39+
test_commit D &&
40+
git push --force --force-with-lease=master:master origin master
41+
) &&
42+
git ls-remote dst refs/heads/master >expect &&
43+
git ls-remote src refs/heads/master >actual &&
44+
test_cmp expect actual
45+
'
46+
47+
test_expect_success 'push to update (protected, tracking)' '
48+
setup_srcdst_basic &&
49+
(
50+
cd src &&
51+
git checkout master &&
52+
test_commit D &&
53+
git checkout HEAD^0
54+
) &&
55+
git ls-remote src refs/heads/master >expect &&
56+
(
57+
cd dst &&
58+
test_commit E &&
59+
git ls-remote . refs/remotes/origin/master >expect &&
60+
test_must_fail git push --force-with-lease=master origin master &&
61+
git ls-remote . refs/remotes/origin/master >actual &&
62+
test_cmp expect actual
63+
) &&
64+
git ls-remote src refs/heads/master >actual &&
65+
test_cmp expect actual
66+
'
67+
68+
test_expect_success 'push to update (protected, tracking, forced)' '
69+
setup_srcdst_basic &&
70+
(
71+
cd src &&
72+
git checkout master &&
73+
test_commit D &&
74+
git checkout HEAD^0
75+
) &&
76+
(
77+
cd dst &&
78+
test_commit E &&
79+
git ls-remote . refs/remotes/origin/master >expect &&
80+
git push --force --force-with-lease=master origin master
81+
) &&
82+
git ls-remote dst refs/heads/master >expect &&
83+
git ls-remote src refs/heads/master >actual &&
84+
test_cmp expect actual
85+
'
86+
87+
test_expect_success 'push to update (allowed)' '
88+
setup_srcdst_basic &&
89+
(
90+
cd dst &&
91+
test_commit D &&
92+
git push --force-with-lease=master:master^ origin master
93+
) &&
94+
git ls-remote dst refs/heads/master >expect &&
95+
git ls-remote src refs/heads/master >actual &&
96+
test_cmp expect actual
97+
'
98+
99+
test_expect_success 'push to update (allowed, tracking)' '
100+
setup_srcdst_basic &&
101+
(
102+
cd dst &&
103+
test_commit D &&
104+
git push --force-with-lease=master origin master
105+
) &&
106+
git ls-remote dst refs/heads/master >expect &&
107+
git ls-remote src refs/heads/master >actual &&
108+
test_cmp expect actual
109+
'
110+
111+
test_expect_success 'push to update (allowed even though no-ff)' '
112+
setup_srcdst_basic &&
113+
(
114+
cd dst &&
115+
git reset --hard HEAD^ &&
116+
test_commit D &&
117+
git push --force-with-lease=master origin master
118+
) &&
119+
git ls-remote dst refs/heads/master >expect &&
120+
git ls-remote src refs/heads/master >actual &&
121+
test_cmp expect actual
122+
'
123+
124+
test_expect_success 'push to delete (protected)' '
125+
setup_srcdst_basic &&
126+
git ls-remote src refs/heads/master >expect &&
127+
(
128+
cd dst &&
129+
test_must_fail git push --force-with-lease=master:master^ origin :master
130+
) &&
131+
git ls-remote src refs/heads/master >actual &&
132+
test_cmp expect actual
133+
'
134+
135+
test_expect_success 'push to delete (protected, forced)' '
136+
setup_srcdst_basic &&
137+
(
138+
cd dst &&
139+
git push --force --force-with-lease=master:master^ origin :master
140+
) &&
141+
>expect &&
142+
git ls-remote src refs/heads/master >actual &&
143+
test_cmp expect actual
144+
'
145+
146+
test_expect_success 'push to delete (allowed)' '
147+
setup_srcdst_basic &&
148+
(
149+
cd dst &&
150+
git push --force-with-lease=master origin :master
151+
) &&
152+
>expect &&
153+
git ls-remote src refs/heads/master >actual &&
154+
test_cmp expect actual
155+
'
156+
157+
test_expect_success 'cover everything with default force-with-lease (protected)' '
158+
setup_srcdst_basic &&
159+
(
160+
cd src &&
161+
git branch naster master^
162+
)
163+
git ls-remote src refs/heads/\* >expect &&
164+
(
165+
cd dst &&
166+
test_must_fail git push --force-with-lease origin master master:naster
167+
) &&
168+
git ls-remote src refs/heads/\* >actual &&
169+
test_cmp expect actual
170+
'
171+
172+
test_expect_success 'cover everything with default force-with-lease (allowed)' '
173+
setup_srcdst_basic &&
174+
(
175+
cd src &&
176+
git branch naster master^
177+
)
178+
(
179+
cd dst &&
180+
git fetch &&
181+
git push --force-with-lease origin master master:naster
182+
) &&
183+
git ls-remote dst refs/heads/master |
184+
sed -e "s/master/naster/" >expect &&
185+
git ls-remote src refs/heads/naster >actual &&
186+
test_cmp expect actual
187+
'
188+
189+
test_done

0 commit comments

Comments
 (0)