Show More
@@ -0,0 +1,292 b'' | |||||
|
1 | #testcases lfsremote-on lfsremote-off | |||
|
2 | #require serve | |||
|
3 | ||||
|
4 | This test splits `hg serve` with and without using the extension into separate | |||
|
5 | tests cases. The tests are broken down as follows, where "LFS"/"No-LFS" | |||
|
6 | indicates whether or not there are commits that use an LFS file, and "D"/"E" | |||
|
7 | indicates whether or not the extension is loaded. The "X" cases are not tested | |||
|
8 | individually, because the lfs requirement causes the process to bail early if | |||
|
9 | the extension is disabled. | |||
|
10 | ||||
|
11 | . Server | |||
|
12 | . | |||
|
13 | . No-LFS LFS | |||
|
14 | . +----------------------------+ | |||
|
15 | . | || D | E | D | E | | |||
|
16 | . |---++=======================| | |||
|
17 | . C | D || N/A | #1 | X | #4 | | |||
|
18 | . l No +---++-----------------------| | |||
|
19 | . i LFS | E || #2 | #2 | X | #5 | | |||
|
20 | . e +---++-----------------------| | |||
|
21 | . n | D || X | X | X | X | | |||
|
22 | . t LFS |---++-----------------------| | |||
|
23 | . | E || #3 | #3 | X | #6 | | |||
|
24 | . |---++-----------------------+ | |||
|
25 | ||||
|
26 | $ hg init server | |||
|
27 | $ SERVER_REQUIRES="$TESTTMP/server/.hg/requires" | |||
|
28 | ||||
|
29 | Skip the experimental.changegroup3=True config. Failure to agree on this comes | |||
|
30 | first, and causes a "ValueError: no common changegroup version" or "abort: | |||
|
31 | HTTP Error 500: Internal Server Error", if the extension is only loaded on one | |||
|
32 | side. If that *is* enabled, the subsequent failure is "abort: missing processor | |||
|
33 | for flag '0x2000'!" if the extension is only loaded on one side (possibly also | |||
|
34 | masked by the Internal Server Error message). | |||
|
35 | $ cat >> $HGRCPATH <<EOF | |||
|
36 | > [lfs] | |||
|
37 | > url=file:$TESTTMP/dummy-remote/ | |||
|
38 | > threshold=10 | |||
|
39 | > [web] | |||
|
40 | > allow_push=* | |||
|
41 | > push_ssl=False | |||
|
42 | > EOF | |||
|
43 | ||||
|
44 | #if lfsremote-on | |||
|
45 | $ hg --config extensions.lfs= -R server \ | |||
|
46 | > serve -p $HGPORT -d --pid-file=hg.pid --errorlog=$TESTTMP/errors.log | |||
|
47 | #else | |||
|
48 | $ hg --config extensions.lfs=! -R server \ | |||
|
49 | > serve -p $HGPORT -d --pid-file=hg.pid --errorlog=$TESTTMP/errors.log | |||
|
50 | #endif | |||
|
51 | ||||
|
52 | $ cat hg.pid >> $DAEMON_PIDS | |||
|
53 | $ hg clone -q http://localhost:$HGPORT client | |||
|
54 | $ grep 'lfs' client/.hg/requires $SERVER_REQUIRES | |||
|
55 | [1] | |||
|
56 | ||||
|
57 | -------------------------------------------------------------------------------- | |||
|
58 | Case #1: client with non-lfs content and the extension disabled; server with | |||
|
59 | non-lfs content, and the extension enabled. | |||
|
60 | ||||
|
61 | $ cd client | |||
|
62 | $ echo 'non-lfs' > nonlfs.txt | |||
|
63 | $ hg ci -Aqm 'non-lfs' | |||
|
64 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
65 | [1] | |||
|
66 | ||||
|
67 | #if lfsremote-on | |||
|
68 | ||||
|
69 | $ hg push -q | |||
|
70 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
71 | [1] | |||
|
72 | ||||
|
73 | TODO: fail more gracefully, or don't mandate changegroup3 for non-lfs repos. | |||
|
74 | ||||
|
75 | $ hg clone -q http://localhost:$HGPORT $TESTTMP/client1_clone | |||
|
76 | abort: HTTP Error 500: Internal Server Error | |||
|
77 | [255] | |||
|
78 | $ grep 'lfs' $TESTTMP/client1_clone/.hg/requires $SERVER_REQUIRES | |||
|
79 | grep: $TESTTMP/client1_clone/.hg/requires: $ENOENT$ | |||
|
80 | [2] | |||
|
81 | ||||
|
82 | TODO: fail more gracefully, or don't mandate changegroup3 for non-lfs repos. | |||
|
83 | ||||
|
84 | $ hg init $TESTTMP/client1_pull | |||
|
85 | $ hg -R $TESTTMP/client1_pull pull -q http://localhost:$HGPORT | |||
|
86 | abort: HTTP Error 500: Internal Server Error | |||
|
87 | [255] | |||
|
88 | $ grep 'lfs' $TESTTMP/client1_pull/.hg/requires $SERVER_REQUIRES | |||
|
89 | [1] | |||
|
90 | ||||
|
91 | $ hg identify http://localhost:$HGPORT | |||
|
92 | d437e1d24fbd | |||
|
93 | ||||
|
94 | #endif | |||
|
95 | ||||
|
96 | -------------------------------------------------------------------------------- | |||
|
97 | Case #2: client with non-lfs content and the extension enabled; server with | |||
|
98 | non-lfs content, and the extension state controlled by #testcases. | |||
|
99 | ||||
|
100 | $ cat >> $HGRCPATH <<EOF | |||
|
101 | > [extensions] | |||
|
102 | > lfs = | |||
|
103 | > EOF | |||
|
104 | $ echo 'non-lfs' > nonlfs2.txt | |||
|
105 | $ hg ci -Aqm 'non-lfs file with lfs client' | |||
|
106 | ||||
|
107 | TODO: fail more gracefully here | |||
|
108 | $ hg push -q 2>&1 | grep '^[A-Z]' || true | |||
|
109 | Traceback (most recent call last): (lfsremote-off !) | |||
|
110 | ValueError: no common changegroup version (lfsremote-off !) | |||
|
111 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
112 | [1] | |||
|
113 | ||||
|
114 | $ hg clone -q http://localhost:$HGPORT $TESTTMP/client2_clone | |||
|
115 | $ grep 'lfs' $TESTTMP/client2_clone/.hg/requires $SERVER_REQUIRES | |||
|
116 | [1] | |||
|
117 | ||||
|
118 | $ hg init $TESTTMP/client2_pull | |||
|
119 | $ hg -R $TESTTMP/client2_pull pull -q http://localhost:$HGPORT | |||
|
120 | $ grep 'lfs' $TESTTMP/client2_pull/.hg/requires $SERVER_REQUIRES | |||
|
121 | [1] | |||
|
122 | ||||
|
123 | XXX: The difference here is the push failed above when the extension isn't | |||
|
124 | enabled on the server. The extension shouldn't need to mess with changegroup | |||
|
125 | versions if there is no lfs content. But the requirement needs to be | |||
|
126 | consistently added before that can be ratcheted back. | |||
|
127 | $ hg identify http://localhost:$HGPORT | |||
|
128 | 1477875038c6 (lfsremote-on !) | |||
|
129 | 000000000000 (lfsremote-off !) | |||
|
130 | ||||
|
131 | -------------------------------------------------------------------------------- | |||
|
132 | Case #3: client with lfs content and the extension enabled; server with | |||
|
133 | non-lfs content, and the extension state controlled by #testcases. | |||
|
134 | ||||
|
135 | TODO: add the 'lfs' requirement on the server for each test in lfsremote-on | |||
|
136 | $ echo 'this is a big lfs file' > lfs.bin | |||
|
137 | $ hg ci -Aqm 'lfs' | |||
|
138 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
139 | .hg/requires:lfs | |||
|
140 | ||||
|
141 | TODO: fail more gracefully here | |||
|
142 | $ hg push -q 2>&1 | grep '^[A-Z]' || true | |||
|
143 | Traceback (most recent call last): (lfsremote-off !) | |||
|
144 | ValueError: no common changegroup version (lfsremote-off !) | |||
|
145 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
146 | .hg/requires:lfs | |||
|
147 | ||||
|
148 | $ hg clone -q http://localhost:$HGPORT $TESTTMP/client3_clone | |||
|
149 | $ grep 'lfs' $TESTTMP/client3_clone/.hg/requires $SERVER_REQUIRES | |||
|
150 | [1] | |||
|
151 | ||||
|
152 | $ hg init $TESTTMP/client3_pull | |||
|
153 | $ hg -R $TESTTMP/client3_pull pull -q http://localhost:$HGPORT | |||
|
154 | $ grep 'lfs' $TESTTMP/client3_pull/.hg/requires $SERVER_REQUIRES | |||
|
155 | [1] | |||
|
156 | ||||
|
157 | XXX: The difference here is the push failed above when the extension isn't | |||
|
158 | enabled on the server. The extension shouldn't need to mess with changegroup | |||
|
159 | versions if there is no lfs content. But the requirement needs to be | |||
|
160 | consistently added before that can be ratcheted back. | |||
|
161 | $ hg identify http://localhost:$HGPORT | |||
|
162 | 8374dc4052cb (lfsremote-on !) | |||
|
163 | 000000000000 (lfsremote-off !) | |||
|
164 | ||||
|
165 | Don't bother testing the lfsremote-off cases- the server won't be able | |||
|
166 | to launch if there's lfs content and the extension is disabled. | |||
|
167 | ||||
|
168 | #if lfsremote-on | |||
|
169 | ||||
|
170 | -------------------------------------------------------------------------------- | |||
|
171 | Case #4: client with non-lfs content and the extension disabled; server with | |||
|
172 | lfs content, and the extension enabled. | |||
|
173 | ||||
|
174 | $ cat >> $HGRCPATH <<EOF | |||
|
175 | > [extensions] | |||
|
176 | > lfs = ! | |||
|
177 | > EOF | |||
|
178 | ||||
|
179 | $ hg init $TESTTMP/client4 | |||
|
180 | $ cd $TESTTMP/client4 | |||
|
181 | $ cat >> .hg/hgrc <<EOF | |||
|
182 | > [paths] | |||
|
183 | > default = http://localhost:$HGPORT | |||
|
184 | > EOF | |||
|
185 | $ echo 'non-lfs' > nonlfs2.txt | |||
|
186 | $ hg ci -Aqm 'non-lfs' | |||
|
187 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
188 | [1] | |||
|
189 | ||||
|
190 | $ hg push -q --force | |||
|
191 | warning: repository is unrelated | |||
|
192 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
193 | [1] | |||
|
194 | ||||
|
195 | TODO: fail more gracefully. | |||
|
196 | ||||
|
197 | $ hg clone -q http://localhost:$HGPORT $TESTTMP/client4_clone | |||
|
198 | abort: HTTP Error 500: Internal Server Error | |||
|
199 | [255] | |||
|
200 | $ grep 'lfs' $TESTTMP/client4_clone/.hg/requires $SERVER_REQUIRES | |||
|
201 | grep: $TESTTMP/client4_clone/.hg/requires: $ENOENT$ | |||
|
202 | [2] | |||
|
203 | ||||
|
204 | TODO: fail more gracefully. | |||
|
205 | ||||
|
206 | $ hg init $TESTTMP/client4_pull | |||
|
207 | $ hg -R $TESTTMP/client4_pull pull -q http://localhost:$HGPORT | |||
|
208 | abort: HTTP Error 500: Internal Server Error | |||
|
209 | [255] | |||
|
210 | $ grep 'lfs' $TESTTMP/client4_pull/.hg/requires $SERVER_REQUIRES | |||
|
211 | [1] | |||
|
212 | ||||
|
213 | $ hg identify http://localhost:$HGPORT | |||
|
214 | 03b080fa9d93 | |||
|
215 | ||||
|
216 | -------------------------------------------------------------------------------- | |||
|
217 | Case #5: client with non-lfs content and the extension enabled; server with | |||
|
218 | lfs content, and the extension enabled. | |||
|
219 | ||||
|
220 | $ cat >> $HGRCPATH <<EOF | |||
|
221 | > [extensions] | |||
|
222 | > lfs = | |||
|
223 | > EOF | |||
|
224 | $ echo 'non-lfs' > nonlfs3.txt | |||
|
225 | $ hg ci -Aqm 'non-lfs file with lfs client' | |||
|
226 | ||||
|
227 | $ hg push -q | |||
|
228 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
229 | [1] | |||
|
230 | ||||
|
231 | $ hg clone -q http://localhost:$HGPORT $TESTTMP/client5_clone | |||
|
232 | $ grep 'lfs' $TESTTMP/client5_clone/.hg/requires $SERVER_REQUIRES | |||
|
233 | [1] | |||
|
234 | ||||
|
235 | $ hg init $TESTTMP/client5_pull | |||
|
236 | $ hg -R $TESTTMP/client5_pull pull -q http://localhost:$HGPORT | |||
|
237 | $ grep 'lfs' $TESTTMP/client5_pull/.hg/requires $SERVER_REQUIRES | |||
|
238 | [1] | |||
|
239 | ||||
|
240 | $ hg identify http://localhost:$HGPORT | |||
|
241 | c729025cc5e3 | |||
|
242 | ||||
|
243 | -------------------------------------------------------------------------------- | |||
|
244 | Case #6: client with lfs content and the extension enabled; server with | |||
|
245 | lfs content, and the extension enabled. | |||
|
246 | ||||
|
247 | TODO: add the 'lfs' requirement on the server for each test | |||
|
248 | ||||
|
249 | $ echo 'this is another lfs file' > lfs2.txt | |||
|
250 | $ hg ci -Aqm 'lfs file with lfs client' | |||
|
251 | ||||
|
252 | $ hg push -q | |||
|
253 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | |||
|
254 | .hg/requires:lfs | |||
|
255 | ||||
|
256 | $ hg clone -q http://localhost:$HGPORT $TESTTMP/client6_clone | |||
|
257 | $ grep 'lfs' $TESTTMP/client6_clone/.hg/requires $SERVER_REQUIRES | |||
|
258 | [1] | |||
|
259 | ||||
|
260 | $ hg init $TESTTMP/client6_pull | |||
|
261 | $ hg -R $TESTTMP/client6_pull pull -q http://localhost:$HGPORT | |||
|
262 | $ grep 'lfs' $TESTTMP/client6_pull/.hg/requires $SERVER_REQUIRES | |||
|
263 | [1] | |||
|
264 | ||||
|
265 | $ hg identify http://localhost:$HGPORT | |||
|
266 | d3b84d50eacb | |||
|
267 | ||||
|
268 | -------------------------------------------------------------------------------- | |||
|
269 | Misc: process dies early if a requirement exists and the extension is disabled | |||
|
270 | ||||
|
271 | $ hg --config extensions.lfs=! summary | |||
|
272 | abort: repository requires features unknown to this Mercurial: lfs! | |||
|
273 | (see https://mercurial-scm.org/wiki/MissingRequirement for more information) | |||
|
274 | [255] | |||
|
275 | ||||
|
276 | #endif | |||
|
277 | ||||
|
278 | $ $PYTHON $TESTDIR/killdaemons.py $DAEMON_PIDS | |||
|
279 | ||||
|
280 | #if lfsremote-on | |||
|
281 | $ cat $TESTTMP/errors.log | grep '^[A-Z]' | |||
|
282 | Traceback (most recent call last): | |||
|
283 | ValueError: no common changegroup version | |||
|
284 | Traceback (most recent call last): | |||
|
285 | ValueError: no common changegroup version | |||
|
286 | Traceback (most recent call last): | |||
|
287 | ValueError: no common changegroup version | |||
|
288 | Traceback (most recent call last): | |||
|
289 | ValueError: no common changegroup version | |||
|
290 | #else | |||
|
291 | $ cat $TESTTMP/errors.log | |||
|
292 | #endif |
General Comments 0
You need to be logged in to leave comments.
Login now