##// END OF EJS Templates
test-subrepo-svn: fix non-determinism...
Patrick Mezard -
r16526:f2cc0ffb stable
parent child Browse files
Show More
@@ -1,550 +1,550
1 1 $ "$TESTDIR/hghave" svn15 || exit 80
2 2
3 3 $ fix_path()
4 4 > {
5 5 > tr '\\' /
6 6 > }
7 7
8 8 SVN wants all paths to start with a slash. Unfortunately, Windows ones
9 9 don't. Handle that.
10 10
11 11 $ escapedwd=`pwd | fix_path`
12 12 $ expr "$escapedwd" : '\/' > /dev/null || escapedwd="/$escapedwd"
13 13 $ escapedwd=`python -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$escapedwd"`
14 14
15 15 create subversion repo
16 16
17 17 $ SVNREPO="file://$escapedwd/svn-repo"
18 18 $ WCROOT="`pwd`/svn-wc"
19 19 $ svnadmin create svn-repo
20 20 $ svn co "$SVNREPO" svn-wc
21 21 Checked out revision 0.
22 22 $ cd svn-wc
23 23 $ mkdir src
24 24 $ echo alpha > src/alpha
25 25 $ svn add src
26 26 A src
27 27 A src/alpha
28 28 $ mkdir externals
29 29 $ echo other > externals/other
30 30 $ svn add externals
31 31 A externals
32 32 A externals/other
33 33 $ svn ci -m 'Add alpha'
34 34 Adding externals
35 35 Adding externals/other
36 36 Adding src
37 37 Adding src/alpha
38 38 Transmitting file data ..
39 39 Committed revision 1.
40 40 $ svn up -q
41 41 $ echo "externals -r1 $SVNREPO/externals" > extdef
42 42 $ svn propset -F extdef svn:externals src
43 43 property 'svn:externals' set on 'src'
44 44 $ svn ci -m 'Setting externals'
45 45 Sending src
46 46
47 47 Committed revision 2.
48 48 $ cd ..
49 49
50 50 create hg repo
51 51
52 52 $ mkdir sub
53 53 $ cd sub
54 54 $ hg init t
55 55 $ cd t
56 56
57 57 first revision, no sub
58 58
59 59 $ echo a > a
60 60 $ hg ci -Am0
61 61 adding a
62 62
63 63 add first svn sub with leading whitespaces
64 64
65 65 $ echo "s = [svn] $SVNREPO/src" >> .hgsub
66 66 $ echo "subdir/s = [svn] $SVNREPO/src" >> .hgsub
67 67 $ svn co --quiet "$SVNREPO"/src s
68 68 $ mkdir subdir
69 69 $ svn co --quiet "$SVNREPO"/src subdir/s
70 70 $ hg add .hgsub
71 71 $ hg ci -m1
72 72
73 73 make sure we avoid empty commits (issue2445)
74 74
75 75 $ hg sum
76 76 parent: 1:* tip (glob)
77 77 1
78 78 branch: default
79 79 commit: (clean)
80 80 update: (current)
81 81 $ hg ci -moops
82 82 nothing changed
83 83 [1]
84 84
85 85 debugsub
86 86
87 87 $ hg debugsub
88 88 path s
89 89 source file://*/svn-repo/src (glob)
90 90 revision 2
91 91 path subdir/s
92 92 source file://*/svn-repo/src (glob)
93 93 revision 2
94 94
95 95 change file in svn and hg, commit
96 96
97 97 $ echo a >> a
98 98 $ echo alpha >> s/alpha
99 99 $ hg sum
100 100 parent: 1:* tip (glob)
101 101 1
102 102 branch: default
103 103 commit: 1 modified, 1 subrepos
104 104 update: (current)
105 105 $ hg commit --subrepos -m 'Message!' | grep -v Updating
106 106 committing subrepository s
107 107 Sending*s/alpha (glob)
108 108 Transmitting file data .
109 109 Committed revision 3.
110 110
111 111 Fetching external item into '*s/externals'* (glob)
112 112 External at revision 1.
113 113
114 114 At revision 3.
115 115 $ hg debugsub
116 116 path s
117 117 source file://*/svn-repo/src (glob)
118 118 revision 3
119 119 path subdir/s
120 120 source file://*/svn-repo/src (glob)
121 121 revision 2
122 122
123 123 add an unrelated revision in svn and update the subrepo to without
124 124 bringing any changes.
125 125
126 126 $ svn mkdir "$SVNREPO/unrelated" -m 'create unrelated'
127 127
128 128 Committed revision 4.
129 129 $ svn up -q s
130 130 $ hg sum
131 131 parent: 2:* tip (glob)
132 132 Message!
133 133 branch: default
134 134 commit: (clean)
135 135 update: (current)
136 136
137 137 $ echo a > s/a
138 138
139 139 should be empty despite change to s/a
140 140
141 141 $ hg st
142 142
143 143 add a commit from svn
144 144
145 145 $ cd "$WCROOT"/src
146 146 $ svn up -q
147 147 $ echo xyz >> alpha
148 148 $ svn propset svn:mime-type 'text/xml' alpha
149 149 property 'svn:mime-type' set on 'alpha'
150 150 $ svn ci -m 'amend a from svn'
151 151 Sending *alpha (glob)
152 152 Transmitting file data .
153 153 Committed revision 5.
154 154 $ cd ../../sub/t
155 155
156 156 this commit from hg will fail
157 157
158 158 $ echo zzz >> s/alpha
159 159 $ (hg ci --subrepos -m 'amend alpha from hg' 2>&1; echo "[$?]") | grep -vi 'out of date'
160 160 committing subrepository s
161 161 abort: svn:*Commit failed (details follow): (glob)
162 162 [255]
163 163 $ svn revert -q s/alpha
164 164
165 165 this commit fails because of meta changes
166 166
167 167 $ svn propset svn:mime-type 'text/html' s/alpha
168 168 property 'svn:mime-type' set on 's/alpha'
169 169 $ (hg ci --subrepos -m 'amend alpha from hg' 2>&1; echo "[$?]") | grep -vi 'out of date'
170 170 committing subrepository s
171 171 abort: svn:*Commit failed (details follow): (glob)
172 172 [255]
173 173 $ svn revert -q s/alpha
174 174
175 175 this commit fails because of externals changes
176 176
177 177 $ echo zzz > s/externals/other
178 178 $ hg ci --subrepos -m 'amend externals from hg'
179 179 committing subrepository s
180 180 abort: cannot commit svn externals
181 181 [255]
182 182 $ hg diff --subrepos -r 1:2 | grep -v diff
183 183 --- a/.hgsubstate Thu Jan 01 00:00:00 1970 +0000
184 184 +++ b/.hgsubstate Thu Jan 01 00:00:00 1970 +0000
185 185 @@ -1,2 +1,2 @@
186 186 -2 s
187 187 +3 s
188 188 2 subdir/s
189 189 --- a/a Thu Jan 01 00:00:00 1970 +0000
190 190 +++ b/a Thu Jan 01 00:00:00 1970 +0000
191 191 @@ -1,1 +1,2 @@
192 192 a
193 193 +a
194 194 $ svn revert -q s/externals/other
195 195
196 196 this commit fails because of externals meta changes
197 197
198 198 $ svn propset svn:mime-type 'text/html' s/externals/other
199 199 property 'svn:mime-type' set on 's/externals/other'
200 200 $ hg ci --subrepos -m 'amend externals from hg'
201 201 committing subrepository s
202 202 abort: cannot commit svn externals
203 203 [255]
204 204 $ svn revert -q s/externals/other
205 205
206 206 clone
207 207
208 208 $ cd ..
209 209 $ hg clone t tc | fix_path
210 210 updating to branch default
211 211 A tc/s/alpha
212 212 U tc/s
213 213
214 214 Fetching external item into 'tc/s/externals'* (glob)
215 215 A tc/s/externals/other
216 216 Checked out external at revision 1.
217 217
218 218 Checked out revision 3.
219 219 A tc/subdir/s/alpha
220 220 U tc/subdir/s
221 221
222 222 Fetching external item into 'tc/subdir/s/externals'* (glob)
223 223 A tc/subdir/s/externals/other
224 224 Checked out external at revision 1.
225 225
226 226 Checked out revision 2.
227 227 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
228 228 $ cd tc
229 229
230 230 debugsub in clone
231 231
232 232 $ hg debugsub
233 233 path s
234 234 source file://*/svn-repo/src (glob)
235 235 revision 3
236 236 path subdir/s
237 237 source file://*/svn-repo/src (glob)
238 238 revision 2
239 239
240 240 verify subrepo is contained within the repo directory
241 241
242 242 $ python -c "import os.path; print os.path.exists('s')"
243 243 True
244 244
245 245 update to nullrev (must delete the subrepo)
246 246
247 247 $ hg up null
248 248 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
249 249 $ ls
250 250
251 251 Check hg update --clean
252 252 $ cd $TESTTMP/sub/t
253 253 $ cd s
254 254 $ echo c0 > alpha
255 255 $ echo c1 > f1
256 256 $ echo c1 > f2
257 257 $ svn add f1 -q
258 258 $ svn status | sort
259 259
260 260 ? * a (glob)
261 261 ? * f2 (glob)
262 262 A * f1 (glob)
263 263 M * alpha (glob)
264 264 Performing status on external item at 'externals'* (glob)
265 265 X * externals (glob)
266 266 $ cd ../..
267 267 $ hg -R t update -C
268 268
269 269 Fetching external item into 't/s/externals'* (glob)
270 270 Checked out external at revision 1.
271 271
272 272 Checked out revision 3.
273 273 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
274 274 $ cd t/s
275 $ svn status
275 $ svn status | sort
276
276 277 ? * a (glob)
277 X * externals (glob)
278 278 ? * f1 (glob)
279 279 ? * f2 (glob)
280
281 280 Performing status on external item at 'externals'* (glob)
281 X * externals (glob)
282 282
283 283 Sticky subrepositories, no changes
284 284 $ cd $TESTTMP/sub/t
285 285 $ hg id -n
286 286 2
287 287 $ cd s
288 288 $ svnversion
289 289 3
290 290 $ cd ..
291 291 $ hg update 1
292 292 U *s/alpha (glob)
293 293
294 294 Fetching external item into '*s/externals'* (glob)
295 295 Checked out external at revision 1.
296 296
297 297 Checked out revision 2.
298 298 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
299 299 $ hg id -n
300 300 1
301 301 $ cd s
302 302 $ svnversion
303 303 2
304 304 $ cd ..
305 305
306 306 Sticky subrepositorys, file changes
307 307 $ touch s/f1
308 308 $ cd s
309 309 $ svn add f1
310 310 A f1
311 311 $ cd ..
312 312 $ hg id -n
313 313 1
314 314 $ cd s
315 315 $ svnversion
316 316 2M
317 317 $ cd ..
318 318 $ hg update tip
319 319 subrepository sources for s differ
320 320 use (l)ocal source (2) or (r)emote source (3)?
321 321 l
322 322 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
323 323 $ hg id -n
324 324 2+
325 325 $ cd s
326 326 $ svnversion
327 327 2M
328 328 $ cd ..
329 329 $ hg update --clean tip
330 330 U *s/alpha (glob)
331 331
332 332 Fetching external item into '*s/externals'* (glob)
333 333 Checked out external at revision 1.
334 334
335 335 Checked out revision 3.
336 336 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
337 337
338 338 Sticky subrepository, revision updates
339 339 $ hg id -n
340 340 2
341 341 $ cd s
342 342 $ svnversion
343 343 3
344 344 $ cd ..
345 345 $ cd s
346 346 $ svn update -qr 1
347 347 $ cd ..
348 348 $ hg update 1
349 349 subrepository sources for s differ (in checked out version)
350 350 use (l)ocal source (1) or (r)emote source (2)?
351 351 l
352 352 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
353 353 $ hg id -n
354 354 1+
355 355 $ cd s
356 356 $ svnversion
357 357 1
358 358 $ cd ..
359 359
360 360 Sticky subrepository, file changes and revision updates
361 361 $ touch s/f1
362 362 $ cd s
363 363 $ svn add f1
364 364 A f1
365 365 $ svnversion
366 366 1M
367 367 $ cd ..
368 368 $ hg id -n
369 369 1+
370 370 $ hg update tip
371 371 subrepository sources for s differ
372 372 use (l)ocal source (1) or (r)emote source (3)?
373 373 l
374 374 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
375 375 $ hg id -n
376 376 2
377 377 $ cd s
378 378 $ svnversion
379 379 1M
380 380 $ cd ..
381 381
382 382 Sticky repository, update --clean
383 383 $ hg update --clean tip | grep -v s/externals/other
384 384 U *s/alpha (glob)
385 385 U *s (glob)
386 386
387 387 Fetching external item into '*s/externals'* (glob)
388 388 Checked out external at revision 1.
389 389
390 390 Checked out revision 3.
391 391 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
392 392 $ hg id -n
393 393 2
394 394 $ cd s
395 395 $ svnversion
396 396 3
397 397 $ cd ..
398 398
399 399 Test subrepo already at intended revision:
400 400 $ cd s
401 401 $ svn update -qr 2
402 402 $ cd ..
403 403 $ hg update 1
404 404 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
405 405 $ hg id -n
406 406 1+
407 407 $ cd s
408 408 $ svnversion
409 409 2
410 410 $ cd ..
411 411
412 412 Test case where subversion would fail to update the subrepo because there
413 413 are unknown directories being replaced by tracked ones (happens with rebase).
414 414
415 415 $ cd $WCROOT/src
416 416 $ mkdir dir
417 417 $ echo epsilon.py > dir/epsilon.py
418 418 $ svn add dir
419 419 A dir
420 420 A dir/epsilon.py
421 421 $ svn ci -m 'Add dir/epsilon.py'
422 422 Adding *dir (glob)
423 423 Adding *dir/epsilon.py (glob)
424 424 Transmitting file data .
425 425 Committed revision 6.
426 426 $ cd ../..
427 427 $ hg init rebaserepo
428 428 $ cd rebaserepo
429 429 $ svn co -r5 --quiet "$SVNREPO"/src s
430 430 $ echo "s = [svn] $SVNREPO/src" >> .hgsub
431 431 $ hg add .hgsub
432 432 $ hg ci -m addsub
433 433 $ echo a > a
434 434 $ hg ci -Am adda
435 435 adding a
436 436 $ hg up 0
437 437 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
438 438 $ svn up -qr6 s
439 439 $ hg ci -m updatesub
440 440 created new head
441 441 $ echo pyc > s/dir/epsilon.pyc
442 442 $ hg up 1
443 443 D *s/dir (glob)
444 444
445 445 Fetching external item into '*s/externals'* (glob)
446 446 Checked out external at revision 1.
447 447
448 448 Checked out revision 5.
449 449 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
450 450 $ if "$TESTDIR/hghave" -q svn15; then
451 451 > hg up 2 >/dev/null 2>&1 || echo update failed
452 452 > fi
453 453
454 454 Modify one of the externals to point to a different path so we can
455 455 test having obstructions when switching branches on checkout:
456 456 $ hg checkout tip
457 457 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
458 458 $ echo "obstruct = [svn] $SVNREPO/externals" >> .hgsub
459 459 $ svn co -r5 --quiet "$SVNREPO"/externals obstruct
460 460 $ hg commit -m 'Start making obstructed working copy'
461 461 $ hg book other
462 462 $ hg co -r 'p1(tip)'
463 463 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
464 464 $ echo "obstruct = [svn] $SVNREPO/src" >> .hgsub
465 465 $ svn co -r5 --quiet "$SVNREPO"/src obstruct
466 466 $ hg commit -m 'Other branch which will be obstructed'
467 467 created new head
468 468
469 469 Switching back to the head where we have another path mapped to the
470 470 same subrepo should work if the subrepo is clean.
471 471 $ hg co other
472 472 A *obstruct/other (glob)
473 473 Checked out revision 1.
474 474 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
475 475
476 476 This is surprising, but is also correct based on the current code:
477 477 $ echo "updating should (maybe) fail" > obstruct/other
478 478 $ hg co tip
479 479 abort: crosses branches (merge branches or use --clean to discard changes)
480 480 [255]
481 481
482 482 Point to a Subversion branch which has since been deleted and recreated
483 483 First, create that condition in the repository.
484 484
485 485 $ hg ci --subrepos -m cleanup | grep -v Updating
486 486 committing subrepository obstruct
487 487 Sending obstruct/other
488 488 Transmitting file data .
489 489 Committed revision 7.
490 490 At revision 7.
491 491 $ svn mkdir -m "baseline" $SVNREPO/trunk
492 492
493 493 Committed revision 8.
494 494 $ svn copy -m "initial branch" $SVNREPO/trunk $SVNREPO/branch
495 495
496 496 Committed revision 9.
497 497 $ svn co --quiet "$SVNREPO"/branch tempwc
498 498 $ cd tempwc
499 499 $ echo "something old" > somethingold
500 500 $ svn add somethingold
501 501 A somethingold
502 502 $ svn ci -m 'Something old'
503 503 Adding somethingold
504 504 Transmitting file data .
505 505 Committed revision 10.
506 506 $ svn rm -m "remove branch" $SVNREPO/branch
507 507
508 508 Committed revision 11.
509 509 $ svn copy -m "recreate branch" $SVNREPO/trunk $SVNREPO/branch
510 510
511 511 Committed revision 12.
512 512 $ svn up -q
513 513 $ echo "something new" > somethingnew
514 514 $ svn add somethingnew
515 515 A somethingnew
516 516 $ svn ci -m 'Something new'
517 517 Adding somethingnew
518 518 Transmitting file data .
519 519 Committed revision 13.
520 520 $ cd ..
521 521 $ rm -rf tempwc
522 522 $ svn co "$SVNREPO/branch"@10 recreated
523 523 A recreated/somethingold
524 524 Checked out revision 10.
525 525 $ echo "recreated = [svn] $SVNREPO/branch" >> .hgsub
526 526 $ hg ci -m addsub
527 527 $ cd recreated
528 528 $ svn up -q
529 529 $ cd ..
530 530 $ hg ci -m updatesub
531 531 $ hg up -r-2
532 532 D *recreated/somethingnew (glob)
533 533 A *recreated/somethingold (glob)
534 534 Checked out revision 10.
535 535 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
536 536 $ test -f recreated/somethingold
537 537
538 538 Test archive
539 539
540 540 $ hg archive -S ../archive-all --debug
541 541 archiving: 0/2 files (0.00%)
542 542 archiving: .hgsub 1/2 files (50.00%)
543 543 archiving: .hgsubstate 2/2 files (100.00%)
544 544 archiving (obstruct): 0/1 files (0.00%)
545 545 archiving (obstruct): 1/1 files (100.00%)
546 546 archiving (s): 0/2 files (0.00%)
547 547 archiving (s): 1/2 files (50.00%)
548 548 archiving (s): 2/2 files (100.00%)
549 549 archiving (recreated): 0/1 files (0.00%)
550 550 archiving (recreated): 1/1 files (100.00%)
General Comments 0
You need to be logged in to leave comments. Login now