##// END OF EJS Templates
test: add a push race case where the raced push touch multiple heads...
marmoute -
r32636:da5cf8cc default
parent child Browse files
Show More
@@ -1,760 +1,897 b''
1 1 ============================================================================================
2 2 Test cases where there are race condition between two clients pushing to the same repository
3 3 ============================================================================================
4 4
5 5 This file tests cases where two clients push to a server at the same time. The
6 6 "raced" client is done preparing it push bundle when the "racing" client
7 7 perform its push. The "raced" client starts its actual push after the "racing"
8 8 client push is fully complete.
9 9
10 10 A set of extension and shell functions ensures this scheduling.
11 11
12 12 $ cat >> delaypush.py << EOF
13 13 > """small extension orchestrate push race
14 14 >
15 15 > Client with the extensions will create a file when ready and get stuck until
16 16 > a file is created."""
17 17 >
18 18 > import atexit
19 19 > import errno
20 20 > import os
21 21 > import time
22 22 >
23 23 > from mercurial import (
24 24 > exchange,
25 25 > extensions,
26 26 > )
27 27 >
28 28 > def delaypush(orig, pushop):
29 29 > # notify we are done preparing
30 30 > readypath = pushop.repo.ui.config('delaypush', 'ready-path', None)
31 31 > if readypath is not None:
32 32 > with open(readypath, 'w') as r:
33 33 > r.write('foo')
34 34 > pushop.repo.ui.status('wrote ready: %s\n' % readypath)
35 35 > # now wait for the other process to be done
36 36 > watchpath = pushop.repo.ui.config('delaypush', 'release-path', None)
37 37 > if watchpath is not None:
38 38 > pushop.repo.ui.status('waiting on: %s\n' % watchpath)
39 39 > limit = 100
40 40 > while 0 < limit and not os.path.exists(watchpath):
41 41 > limit -= 1
42 42 > time.sleep(0.1)
43 43 > if limit <= 0:
44 44 > repo.ui.warn('exiting without watchfile: %s' % watchpath)
45 45 > else:
46 46 > # delete the file at the end of the push
47 47 > def delete():
48 48 > try:
49 49 > os.unlink(watchpath)
50 50 > except OSError as exc:
51 51 > if exc.errno != errno.ENOENT:
52 52 > raise
53 53 > atexit.register(delete)
54 54 > return orig(pushop)
55 55 >
56 56 > def uisetup(ui):
57 57 > extensions.wrapfunction(exchange, '_pushbundle2', delaypush)
58 58 > EOF
59 59
60 60 $ waiton () {
61 61 > # wait for a file to be created (then delete it)
62 62 > count=100
63 63 > while [ ! -f $1 ] ;
64 64 > do
65 65 > sleep 0.1;
66 66 > count=`expr $count - 1`;
67 67 > if [ $count -lt 0 ];
68 68 > then
69 69 > break
70 70 > fi;
71 71 > done
72 72 > [ -f $1 ] || echo "ready file still missing: $1"
73 73 > rm -f $1
74 74 > }
75 75
76 76 $ release () {
77 77 > # create a file and wait for it be deleted
78 78 > count=100
79 79 > touch $1
80 80 > while [ -f $1 ] ;
81 81 > do
82 82 > sleep 0.1;
83 83 > count=`expr $count - 1`;
84 84 > if [ $count -lt 0 ];
85 85 > then
86 86 > break
87 87 > fi;
88 88 > done
89 89 > [ ! -f $1 ] || echo "delay file still exist: $1"
90 90 > }
91 91
92 92 $ cat >> $HGRCPATH << EOF
93 93 > [ui]
94 94 > ssh = python "$TESTDIR/dummyssh"
95 95 > # simplify output
96 96 > logtemplate = {node|short} {desc} ({branch})
97 97 > [alias]
98 98 > graph = log -G --rev 'sort(all(), "topo")'
99 99 > EOF
100 100
101 101 Setup
102 102 -----
103 103
104 104 create a repo with one root
105 105
106 106 $ hg init server
107 107 $ cd server
108 108 $ echo root > root
109 109 $ hg ci -Am "C-ROOT"
110 110 adding root
111 111 $ cd ..
112 112
113 113 clone it in two clients
114 114
115 115 $ hg clone ssh://user@dummy/server client-racy
116 116 requesting all changes
117 117 adding changesets
118 118 adding manifests
119 119 adding file changes
120 120 added 1 changesets with 1 changes to 1 files
121 121 updating to branch default
122 122 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
123 123 $ hg clone ssh://user@dummy/server client-other
124 124 requesting all changes
125 125 adding changesets
126 126 adding manifests
127 127 adding file changes
128 128 added 1 changesets with 1 changes to 1 files
129 129 updating to branch default
130 130 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
131 131
132 132 setup one to allow race on push
133 133
134 134 $ cat >> client-racy/.hg/hgrc << EOF
135 135 > [extensions]
136 136 > delaypush = $TESTTMP/delaypush.py
137 137 > [delaypush]
138 138 > ready-path = $TESTTMP/readyfile
139 139 > release-path = $TESTTMP/watchfile
140 140 > EOF
141 141
142 142 Simple race, both try to push to the server at the same time
143 143 ------------------------------------------------------------
144 144
145 145 Both try to replace the same head
146 146
147 147 # a
148 148 # | b
149 149 # |/
150 150 # *
151 151
152 152 Creating changesets
153 153
154 154 $ echo b > client-other/a
155 155 $ hg -R client-other/ add client-other/a
156 156 $ hg -R client-other/ commit -m "C-A"
157 157 $ echo b > client-racy/b
158 158 $ hg -R client-racy/ add client-racy/b
159 159 $ hg -R client-racy/ commit -m "C-B"
160 160
161 161 Pushing
162 162
163 163 $ hg -R client-racy push -r 'tip' > ./push-log 2>&1 &
164 164
165 165 $ waiton $TESTTMP/readyfile
166 166
167 167 $ hg -R client-other push -r 'tip'
168 168 pushing to ssh://user@dummy/server
169 169 searching for changes
170 170 remote: adding changesets
171 171 remote: adding manifests
172 172 remote: adding file changes
173 173 remote: added 1 changesets with 1 changes to 1 files
174 174
175 175 $ release $TESTTMP/watchfile
176 176
177 177 Check the result of the push
178 178
179 179 $ cat ./push-log
180 180 pushing to ssh://user@dummy/server
181 181 searching for changes
182 182 wrote ready: $TESTTMP/readyfile
183 183 waiting on: $TESTTMP/watchfile
184 184 abort: push failed:
185 185 'repository changed while pushing - please try again'
186 186
187 187 $ hg -R server graph
188 188 o 98217d5a1659 C-A (default)
189 189 |
190 190 @ 842e2fac6304 C-ROOT (default)
191 191
192 192
193 193 Pushing on two different heads
194 194 ------------------------------
195 195
196 196 Both try to replace a different head
197 197
198 198 # a b
199 199 # | |
200 200 # * *
201 201 # |/
202 202 # *
203 203
204 204 (resync-all)
205 205
206 206 $ hg -R ./server pull ./client-racy
207 207 pulling from ./client-racy
208 208 searching for changes
209 209 adding changesets
210 210 adding manifests
211 211 adding file changes
212 212 added 1 changesets with 1 changes to 1 files (+1 heads)
213 213 (run 'hg heads' to see heads, 'hg merge' to merge)
214 214 $ hg -R ./client-other pull
215 215 pulling from ssh://user@dummy/server
216 216 searching for changes
217 217 adding changesets
218 218 adding manifests
219 219 adding file changes
220 220 added 1 changesets with 1 changes to 1 files (+1 heads)
221 221 (run 'hg heads' to see heads, 'hg merge' to merge)
222 222 $ hg -R ./client-racy pull
223 223 pulling from ssh://user@dummy/server
224 224 searching for changes
225 225 adding changesets
226 226 adding manifests
227 227 adding file changes
228 228 added 1 changesets with 1 changes to 1 files (+1 heads)
229 229 (run 'hg heads' to see heads, 'hg merge' to merge)
230 230
231 231 $ hg -R server graph
232 232 o a9149a1428e2 C-B (default)
233 233 |
234 234 | o 98217d5a1659 C-A (default)
235 235 |/
236 236 @ 842e2fac6304 C-ROOT (default)
237 237
238 238
239 239 Creating changesets
240 240
241 241 $ echo aa >> client-other/a
242 242 $ hg -R client-other/ commit -m "C-C"
243 243 $ echo bb >> client-racy/b
244 244 $ hg -R client-racy/ commit -m "C-D"
245 245
246 246 Pushing
247 247
248 248 $ hg -R client-racy push -r 'tip' > ./push-log 2>&1 &
249 249
250 250 $ waiton $TESTTMP/readyfile
251 251
252 252 $ hg -R client-other push -r 'tip'
253 253 pushing to ssh://user@dummy/server
254 254 searching for changes
255 255 remote: adding changesets
256 256 remote: adding manifests
257 257 remote: adding file changes
258 258 remote: added 1 changesets with 1 changes to 1 files
259 259
260 260 $ release $TESTTMP/watchfile
261 261
262 262 Check the result of the push
263 263
264 264 $ cat ./push-log
265 265 pushing to ssh://user@dummy/server
266 266 searching for changes
267 267 wrote ready: $TESTTMP/readyfile
268 268 waiting on: $TESTTMP/watchfile
269 269 abort: push failed:
270 270 'repository changed while pushing - please try again'
271 271
272 272 $ hg -R server graph
273 273 o 51c544a58128 C-C (default)
274 274 |
275 275 o 98217d5a1659 C-A (default)
276 276 |
277 277 | o a9149a1428e2 C-B (default)
278 278 |/
279 279 @ 842e2fac6304 C-ROOT (default)
280 280
281 281 Pushing while someone creates a new head
282 282 -----------------------------------------
283 283
284 284 Pushing a new changeset while someone creates a new branch.
285 285
286 286 # a (raced)
287 287 # |
288 288 # * b
289 289 # |/
290 290 # *
291 291
292 292 (resync-all)
293 293
294 294 $ hg -R ./server pull ./client-racy
295 295 pulling from ./client-racy
296 296 searching for changes
297 297 adding changesets
298 298 adding manifests
299 299 adding file changes
300 300 added 1 changesets with 1 changes to 1 files
301 301 (run 'hg update' to get a working copy)
302 302 $ hg -R ./client-other pull
303 303 pulling from ssh://user@dummy/server
304 304 searching for changes
305 305 adding changesets
306 306 adding manifests
307 307 adding file changes
308 308 added 1 changesets with 1 changes to 1 files
309 309 (run 'hg update' to get a working copy)
310 310 $ hg -R ./client-racy pull
311 311 pulling from ssh://user@dummy/server
312 312 searching for changes
313 313 adding changesets
314 314 adding manifests
315 315 adding file changes
316 316 added 1 changesets with 1 changes to 1 files
317 317 (run 'hg update' to get a working copy)
318 318
319 319 $ hg -R server graph
320 320 o 59e76faf78bd C-D (default)
321 321 |
322 322 o a9149a1428e2 C-B (default)
323 323 |
324 324 | o 51c544a58128 C-C (default)
325 325 | |
326 326 | o 98217d5a1659 C-A (default)
327 327 |/
328 328 @ 842e2fac6304 C-ROOT (default)
329 329
330 330
331 331 Creating changesets
332 332
333 333 (new head)
334 334
335 335 $ hg -R client-other/ up 'desc("C-A")'
336 336 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
337 337 $ echo aaa >> client-other/a
338 338 $ hg -R client-other/ commit -m "C-E"
339 339 created new head
340 340
341 341 (children of existing head)
342 342
343 343 $ hg -R client-racy/ up 'desc("C-C")'
344 344 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
345 345 $ echo bbb >> client-racy/a
346 346 $ hg -R client-racy/ commit -m "C-F"
347 347
348 348 Pushing
349 349
350 350 $ hg -R client-racy push -r 'tip' > ./push-log 2>&1 &
351 351
352 352 $ waiton $TESTTMP/readyfile
353 353
354 354 $ hg -R client-other push -fr 'tip'
355 355 pushing to ssh://user@dummy/server
356 356 searching for changes
357 357 remote: adding changesets
358 358 remote: adding manifests
359 359 remote: adding file changes
360 360 remote: added 1 changesets with 1 changes to 1 files (+1 heads)
361 361
362 362 $ release $TESTTMP/watchfile
363 363
364 364 Check the result of the push
365 365
366 366 $ cat ./push-log
367 367 pushing to ssh://user@dummy/server
368 368 searching for changes
369 369 wrote ready: $TESTTMP/readyfile
370 370 waiting on: $TESTTMP/watchfile
371 371 abort: push failed:
372 372 'repository changed while pushing - please try again'
373 373
374 374 $ hg -R server graph
375 375 o d603e2c0cdd7 C-E (default)
376 376 |
377 377 | o 51c544a58128 C-C (default)
378 378 |/
379 379 o 98217d5a1659 C-A (default)
380 380 |
381 381 | o 59e76faf78bd C-D (default)
382 382 | |
383 383 | o a9149a1428e2 C-B (default)
384 384 |/
385 385 @ 842e2fac6304 C-ROOT (default)
386 386
387 387
388 388 Pushing touching different named branch (same topo): new branch raced
389 389 ---------------------------------------------------------------------
390 390
391 391 Pushing two children on the same head, one is a different named branch
392 392
393 393 # a (raced, branch-a)
394 394 # |
395 395 # | b (default branch)
396 396 # |/
397 397 # *
398 398
399 399 (resync-all)
400 400
401 401 $ hg -R ./server pull ./client-racy
402 402 pulling from ./client-racy
403 403 searching for changes
404 404 adding changesets
405 405 adding manifests
406 406 adding file changes
407 407 added 1 changesets with 1 changes to 1 files
408 408 (run 'hg update' to get a working copy)
409 409 $ hg -R ./client-other pull
410 410 pulling from ssh://user@dummy/server
411 411 searching for changes
412 412 adding changesets
413 413 adding manifests
414 414 adding file changes
415 415 added 1 changesets with 1 changes to 1 files
416 416 (run 'hg update' to get a working copy)
417 417 $ hg -R ./client-racy pull
418 418 pulling from ssh://user@dummy/server
419 419 searching for changes
420 420 adding changesets
421 421 adding manifests
422 422 adding file changes
423 423 added 1 changesets with 1 changes to 1 files (+1 heads)
424 424 (run 'hg heads .' to see heads, 'hg merge' to merge)
425 425
426 426 $ hg -R server graph
427 427 o d9e379a8c432 C-F (default)
428 428 |
429 429 o 51c544a58128 C-C (default)
430 430 |
431 431 | o d603e2c0cdd7 C-E (default)
432 432 |/
433 433 o 98217d5a1659 C-A (default)
434 434 |
435 435 | o 59e76faf78bd C-D (default)
436 436 | |
437 437 | o a9149a1428e2 C-B (default)
438 438 |/
439 439 @ 842e2fac6304 C-ROOT (default)
440 440
441 441
442 442 Creating changesets
443 443
444 444 (update existing head)
445 445
446 446 $ hg -R client-other/ up 'desc("C-F")'
447 447 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
448 448 $ echo aaa >> client-other/a
449 449 $ hg -R client-other/ commit -m "C-G"
450 450
451 451 (new named branch from that existing head)
452 452
453 453 $ hg -R client-racy/ up 'desc("C-F")'
454 454 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
455 455 $ echo bbb >> client-racy/a
456 456 $ hg -R client-racy/ branch my-first-test-branch
457 457 marked working directory as branch my-first-test-branch
458 458 (branches are permanent and global, did you want a bookmark?)
459 459 $ hg -R client-racy/ commit -m "C-H"
460 460
461 461 Pushing
462 462
463 463 $ hg -R client-racy push -r 'tip' --new-branch > ./push-log 2>&1 &
464 464
465 465 $ waiton $TESTTMP/readyfile
466 466
467 467 $ hg -R client-other push -fr 'tip'
468 468 pushing to ssh://user@dummy/server
469 469 searching for changes
470 470 remote: adding changesets
471 471 remote: adding manifests
472 472 remote: adding file changes
473 473 remote: added 1 changesets with 1 changes to 1 files
474 474
475 475 $ release $TESTTMP/watchfile
476 476
477 477 Check the result of the push
478 478
479 479 $ cat ./push-log
480 480 pushing to ssh://user@dummy/server
481 481 searching for changes
482 482 wrote ready: $TESTTMP/readyfile
483 483 waiting on: $TESTTMP/watchfile
484 484 abort: push failed:
485 485 'repository changed while pushing - please try again'
486 486
487 487 $ hg -R server graph
488 488 o 75d69cba5402 C-G (default)
489 489 |
490 490 o d9e379a8c432 C-F (default)
491 491 |
492 492 o 51c544a58128 C-C (default)
493 493 |
494 494 | o d603e2c0cdd7 C-E (default)
495 495 |/
496 496 o 98217d5a1659 C-A (default)
497 497 |
498 498 | o 59e76faf78bd C-D (default)
499 499 | |
500 500 | o a9149a1428e2 C-B (default)
501 501 |/
502 502 @ 842e2fac6304 C-ROOT (default)
503 503
504 504
505 505 pushing touching different named branch (same topo): old branch raced
506 506 ---------------------------------------------------------------------
507 507
508 508 Pushing two children on the same head, one is a different named branch
509 509
510 510 # a (raced, default-branch)
511 511 # |
512 512 # | b (new branch)
513 513 # |/
514 514 # * (default-branch)
515 515
516 516 (resync-all)
517 517
518 518 $ hg -R ./server pull ./client-racy
519 519 pulling from ./client-racy
520 520 searching for changes
521 521 adding changesets
522 522 adding manifests
523 523 adding file changes
524 524 added 1 changesets with 1 changes to 1 files (+1 heads)
525 525 (run 'hg heads .' to see heads, 'hg merge' to merge)
526 526 $ hg -R ./client-other pull
527 527 pulling from ssh://user@dummy/server
528 528 searching for changes
529 529 adding changesets
530 530 adding manifests
531 531 adding file changes
532 532 added 1 changesets with 1 changes to 1 files (+1 heads)
533 533 (run 'hg heads .' to see heads, 'hg merge' to merge)
534 534 $ hg -R ./client-racy pull
535 535 pulling from ssh://user@dummy/server
536 536 searching for changes
537 537 adding changesets
538 538 adding manifests
539 539 adding file changes
540 540 added 1 changesets with 1 changes to 1 files (+1 heads)
541 541 (run 'hg heads' to see heads)
542 542
543 543 $ hg -R server graph
544 544 o 833be552cfe6 C-H (my-first-test-branch)
545 545 |
546 546 | o 75d69cba5402 C-G (default)
547 547 |/
548 548 o d9e379a8c432 C-F (default)
549 549 |
550 550 o 51c544a58128 C-C (default)
551 551 |
552 552 | o d603e2c0cdd7 C-E (default)
553 553 |/
554 554 o 98217d5a1659 C-A (default)
555 555 |
556 556 | o 59e76faf78bd C-D (default)
557 557 | |
558 558 | o a9149a1428e2 C-B (default)
559 559 |/
560 560 @ 842e2fac6304 C-ROOT (default)
561 561
562 562
563 563 Creating changesets
564 564
565 565 (new named branch from one head)
566 566
567 567 $ hg -R client-other/ up 'desc("C-G")'
568 568 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
569 569 $ echo aaa >> client-other/a
570 570 $ hg -R client-other/ branch my-second-test-branch
571 571 marked working directory as branch my-second-test-branch
572 572 $ hg -R client-other/ commit -m "C-I"
573 573
574 574 (children "updating" that same head)
575 575
576 576 $ hg -R client-racy/ up 'desc("C-G")'
577 577 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
578 578 $ echo bbb >> client-racy/a
579 579 $ hg -R client-racy/ commit -m "C-J"
580 580
581 581 Pushing
582 582
583 583 $ hg -R client-racy push -r 'tip' > ./push-log 2>&1 &
584 584
585 585 $ waiton $TESTTMP/readyfile
586 586
587 587 $ hg -R client-other push -fr 'tip' --new-branch
588 588 pushing to ssh://user@dummy/server
589 589 searching for changes
590 590 remote: adding changesets
591 591 remote: adding manifests
592 592 remote: adding file changes
593 593 remote: added 1 changesets with 1 changes to 1 files
594 594
595 595 $ release $TESTTMP/watchfile
596 596
597 597 Check the result of the push
598 598
599 599 $ cat ./push-log
600 600 pushing to ssh://user@dummy/server
601 601 searching for changes
602 602 wrote ready: $TESTTMP/readyfile
603 603 waiting on: $TESTTMP/watchfile
604 604 abort: push failed:
605 605 'repository changed while pushing - please try again'
606 606
607 607 $ hg -R server graph
608 608 o b35ed749f288 C-I (my-second-test-branch)
609 609 |
610 610 o 75d69cba5402 C-G (default)
611 611 |
612 612 | o 833be552cfe6 C-H (my-first-test-branch)
613 613 |/
614 614 o d9e379a8c432 C-F (default)
615 615 |
616 616 o 51c544a58128 C-C (default)
617 617 |
618 618 | o d603e2c0cdd7 C-E (default)
619 619 |/
620 620 o 98217d5a1659 C-A (default)
621 621 |
622 622 | o 59e76faf78bd C-D (default)
623 623 | |
624 624 | o a9149a1428e2 C-B (default)
625 625 |/
626 626 @ 842e2fac6304 C-ROOT (default)
627 627
628 628
629 629 pushing racing push touch multiple heads
630 630 ----------------------------------------
631 631
632 632 There are multiple heads, but the racing push touch all of them
633 633
634 634 # a (raced)
635 635 # | b
636 636 # |/|
637 637 # * *
638 638 # |/
639 639 # *
640 640
641 641 (resync-all)
642 642
643 643 $ hg -R ./server pull ./client-racy
644 644 pulling from ./client-racy
645 645 searching for changes
646 646 adding changesets
647 647 adding manifests
648 648 adding file changes
649 649 added 1 changesets with 1 changes to 1 files (+1 heads)
650 650 (run 'hg heads .' to see heads, 'hg merge' to merge)
651 651 $ hg -R ./client-other pull
652 652 pulling from ssh://user@dummy/server
653 653 searching for changes
654 654 adding changesets
655 655 adding manifests
656 656 adding file changes
657 657 added 1 changesets with 1 changes to 1 files (+1 heads)
658 658 (run 'hg heads' to see heads)
659 659 $ hg -R ./client-racy pull
660 660 pulling from ssh://user@dummy/server
661 661 searching for changes
662 662 adding changesets
663 663 adding manifests
664 664 adding file changes
665 665 added 1 changesets with 1 changes to 1 files (+1 heads)
666 666 (run 'hg heads .' to see heads, 'hg merge' to merge)
667 667
668 668 $ hg -R server graph
669 669 o 89420bf00fae C-J (default)
670 670 |
671 671 | o b35ed749f288 C-I (my-second-test-branch)
672 672 |/
673 673 o 75d69cba5402 C-G (default)
674 674 |
675 675 | o 833be552cfe6 C-H (my-first-test-branch)
676 676 |/
677 677 o d9e379a8c432 C-F (default)
678 678 |
679 679 o 51c544a58128 C-C (default)
680 680 |
681 681 | o d603e2c0cdd7 C-E (default)
682 682 |/
683 683 o 98217d5a1659 C-A (default)
684 684 |
685 685 | o 59e76faf78bd C-D (default)
686 686 | |
687 687 | o a9149a1428e2 C-B (default)
688 688 |/
689 689 @ 842e2fac6304 C-ROOT (default)
690 690
691 691
692 692 Creating changesets
693 693
694 694 (merges heads)
695 695
696 696 $ hg -R client-other/ up 'desc("C-E")'
697 697 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
698 698 $ hg -R client-other/ merge 'desc("C-D")'
699 699 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
700 700 (branch merge, don't forget to commit)
701 701 $ hg -R client-other/ commit -m "C-K"
702 702
703 703 (update one head)
704 704
705 705 $ hg -R client-racy/ up 'desc("C-D")'
706 706 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
707 707 $ echo bbb >> client-racy/b
708 708 $ hg -R client-racy/ commit -m "C-L"
709 709
710 710 Pushing
711 711
712 712 $ hg -R client-racy push -r 'tip' > ./push-log 2>&1 &
713 713
714 714 $ waiton $TESTTMP/readyfile
715 715
716 716 $ hg -R client-other push -fr 'tip' --new-branch
717 717 pushing to ssh://user@dummy/server
718 718 searching for changes
719 719 remote: adding changesets
720 720 remote: adding manifests
721 721 remote: adding file changes
722 722 remote: added 1 changesets with 0 changes to 0 files (-1 heads)
723 723
724 724 $ release $TESTTMP/watchfile
725 725
726 726 Check the result of the push
727 727
728 728 $ cat ./push-log
729 729 pushing to ssh://user@dummy/server
730 730 searching for changes
731 731 wrote ready: $TESTTMP/readyfile
732 732 waiting on: $TESTTMP/watchfile
733 733 abort: push failed:
734 734 'repository changed while pushing - please try again'
735 735
736 736 $ hg -R server graph
737 737 o be705100c623 C-K (default)
738 738 |\
739 739 | o d603e2c0cdd7 C-E (default)
740 740 | |
741 741 o | 59e76faf78bd C-D (default)
742 742 | |
743 743 | | o 89420bf00fae C-J (default)
744 744 | | |
745 745 | | | o b35ed749f288 C-I (my-second-test-branch)
746 746 | | |/
747 747 | | o 75d69cba5402 C-G (default)
748 748 | | |
749 749 | | | o 833be552cfe6 C-H (my-first-test-branch)
750 750 | | |/
751 751 | | o d9e379a8c432 C-F (default)
752 752 | | |
753 753 | | o 51c544a58128 C-C (default)
754 754 | |/
755 755 o | a9149a1428e2 C-B (default)
756 756 | |
757 757 | o 98217d5a1659 C-A (default)
758 758 |/
759 759 @ 842e2fac6304 C-ROOT (default)
760 760
761
762 pushing raced push touch multiple heads
763 ---------------------------------------
764
765 There are multiple heads, the raced push touch all of them
766
767 # b
768 # | a (raced)
769 # |/|
770 # * *
771 # |/
772 # *
773
774 (resync-all)
775
776 $ hg -R ./server pull ./client-racy
777 pulling from ./client-racy
778 searching for changes
779 adding changesets
780 adding manifests
781 adding file changes
782 added 1 changesets with 1 changes to 1 files (+1 heads)
783 (run 'hg heads .' to see heads, 'hg merge' to merge)
784 $ hg -R ./client-other pull
785 pulling from ssh://user@dummy/server
786 searching for changes
787 adding changesets
788 adding manifests
789 adding file changes
790 added 1 changesets with 1 changes to 1 files (+1 heads)
791 (run 'hg heads .' to see heads, 'hg merge' to merge)
792 $ hg -R ./client-racy pull
793 pulling from ssh://user@dummy/server
794 searching for changes
795 adding changesets
796 adding manifests
797 adding file changes
798 added 1 changesets with 0 changes to 0 files
799 (run 'hg update' to get a working copy)
800
801 $ hg -R server graph
802 o cac2cead0ff0 C-L (default)
803 |
804 | o be705100c623 C-K (default)
805 |/|
806 | o d603e2c0cdd7 C-E (default)
807 | |
808 o | 59e76faf78bd C-D (default)
809 | |
810 | | o 89420bf00fae C-J (default)
811 | | |
812 | | | o b35ed749f288 C-I (my-second-test-branch)
813 | | |/
814 | | o 75d69cba5402 C-G (default)
815 | | |
816 | | | o 833be552cfe6 C-H (my-first-test-branch)
817 | | |/
818 | | o d9e379a8c432 C-F (default)
819 | | |
820 | | o 51c544a58128 C-C (default)
821 | |/
822 o | a9149a1428e2 C-B (default)
823 | |
824 | o 98217d5a1659 C-A (default)
825 |/
826 @ 842e2fac6304 C-ROOT (default)
827
828
829 Creating changesets
830
831 (update existing head)
832
833 $ echo aaa >> client-other/a
834 $ hg -R client-other/ commit -m "C-M"
835
836 (merge heads)
837
838 $ hg -R client-racy/ merge 'desc("C-K")'
839 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
840 (branch merge, don't forget to commit)
841 $ hg -R client-racy/ commit -m "C-N"
842
843 Pushing
844
845 $ hg -R client-racy push -r 'tip' > ./push-log 2>&1 &
846
847 $ waiton $TESTTMP/readyfile
848
849 $ hg -R client-other push -fr 'tip' --new-branch
850 pushing to ssh://user@dummy/server
851 searching for changes
852 remote: adding changesets
853 remote: adding manifests
854 remote: adding file changes
855 remote: added 1 changesets with 1 changes to 1 files
856
857 $ release $TESTTMP/watchfile
858
859 Check the result of the push
860
861 $ cat ./push-log
862 pushing to ssh://user@dummy/server
863 searching for changes
864 wrote ready: $TESTTMP/readyfile
865 waiting on: $TESTTMP/watchfile
866 abort: push failed:
867 'repository changed while pushing - please try again'
868
869 $ hg -R server graph
870 o 6fd3090135df C-M (default)
871 |
872 o be705100c623 C-K (default)
873 |\
874 | o d603e2c0cdd7 C-E (default)
875 | |
876 +---o cac2cead0ff0 C-L (default)
877 | |
878 o | 59e76faf78bd C-D (default)
879 | |
880 | | o 89420bf00fae C-J (default)
881 | | |
882 | | | o b35ed749f288 C-I (my-second-test-branch)
883 | | |/
884 | | o 75d69cba5402 C-G (default)
885 | | |
886 | | | o 833be552cfe6 C-H (my-first-test-branch)
887 | | |/
888 | | o d9e379a8c432 C-F (default)
889 | | |
890 | | o 51c544a58128 C-C (default)
891 | |/
892 o | a9149a1428e2 C-B (default)
893 | |
894 | o 98217d5a1659 C-A (default)
895 |/
896 @ 842e2fac6304 C-ROOT (default)
897
General Comments 0
You need to be logged in to leave comments. Login now