##// END OF EJS Templates
test-shelve: do not use non-portable pipe-and
timeless -
r26776:f69c7939 default
parent child Browse files
Show More
@@ -1,1176 +1,1176 b''
1 1 $ cat <<EOF >> $HGRCPATH
2 2 > [extensions]
3 3 > mq =
4 4 > shelve =
5 5 > [defaults]
6 6 > diff = --nodates --git
7 7 > qnew = --date '0 0'
8 8 > [shelve]
9 9 > maxbackups = 2
10 10 > EOF
11 11
12 12 $ hg init repo
13 13 $ cd repo
14 14 $ mkdir a b
15 15 $ echo a > a/a
16 16 $ echo b > b/b
17 17 $ echo c > c
18 18 $ echo d > d
19 19 $ echo x > x
20 20 $ hg addremove -q
21 21
22 22 shelve has a help message
23 23 $ hg shelve -h
24 24 hg shelve [OPTION]... [FILE]...
25 25
26 26 save and set aside changes from the working directory
27 27
28 28 Shelving takes files that "hg status" reports as not clean, saves the
29 29 modifications to a bundle (a shelved change), and reverts the files so
30 30 that their state in the working directory becomes clean.
31 31
32 32 To restore these changes to the working directory, using "hg unshelve";
33 33 this will work even if you switch to a different commit.
34 34
35 35 When no files are specified, "hg shelve" saves all not-clean files. If
36 36 specific files or directories are named, only changes to those files are
37 37 shelved.
38 38
39 39 Each shelved change has a name that makes it easier to find later. The
40 40 name of a shelved change defaults to being based on the active bookmark,
41 41 or if there is no active bookmark, the current named branch. To specify a
42 42 different name, use "--name".
43 43
44 44 To see a list of existing shelved changes, use the "--list" option. For
45 45 each shelved change, this will print its name, age, and description; use "
46 46 --patch" or "--stat" for more details.
47 47
48 48 To delete specific shelved changes, use "--delete". To delete all shelved
49 49 changes, use "--cleanup".
50 50
51 51 (use "hg help -e shelve" to show help for the shelve extension)
52 52
53 53 options ([+] can be repeated):
54 54
55 55 -A --addremove mark new/missing files as added/removed before
56 56 shelving
57 57 --cleanup delete all shelved changes
58 58 --date DATE shelve with the specified commit date
59 59 -d --delete delete the named shelved change(s)
60 60 -e --edit invoke editor on commit messages
61 61 -l --list list current shelves
62 62 -m --message TEXT use text as shelve message
63 63 -n --name NAME use the given name for the shelved commit
64 64 -p --patch show patch
65 65 -i --interactive interactive mode, only works while creating a shelve
66 66 --stat output diffstat-style summary of changes
67 67 -I --include PATTERN [+] include names matching the given patterns
68 68 -X --exclude PATTERN [+] exclude names matching the given patterns
69 69 --mq operate on patch repository
70 70
71 71 (some details hidden, use --verbose to show complete help)
72 72
73 73 shelving in an empty repo should be possible
74 74 (this tests also that editor is not invoked, if '--edit' is not
75 75 specified)
76 76
77 77 $ HGEDITOR=cat hg shelve
78 78 shelved as default
79 79 0 files updated, 0 files merged, 5 files removed, 0 files unresolved
80 80
81 81 $ hg unshelve
82 82 unshelving change 'default'
83 83
84 84 $ hg commit -q -m 'initial commit'
85 85
86 86 $ hg shelve
87 87 nothing changed
88 88 [1]
89 89
90 90 make sure shelve files were backed up
91 91
92 92 $ ls .hg/shelve-backup
93 93 default.hg
94 94 default.patch
95 95
96 96 create an mq patch - shelving should work fine with a patch applied
97 97
98 98 $ echo n > n
99 99 $ hg add n
100 100 $ hg commit n -m second
101 101 $ hg qnew second.patch
102 102
103 103 shelve a change that we will delete later
104 104
105 105 $ echo a >> a/a
106 106 $ hg shelve
107 107 shelved as default
108 108 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
109 109
110 110 set up some more complex changes to shelve
111 111
112 112 $ echo a >> a/a
113 113 $ hg mv b b.rename
114 114 moving b/b to b.rename/b (glob)
115 115 $ hg cp c c.copy
116 116 $ hg status -C
117 117 M a/a
118 118 A b.rename/b
119 119 b/b
120 120 A c.copy
121 121 c
122 122 R b/b
123 123
124 124 prevent some foot-shooting
125 125
126 126 $ hg shelve -n foo/bar
127 127 abort: shelved change names may not contain slashes
128 128 [255]
129 129 $ hg shelve -n .baz
130 130 abort: shelved change names may not start with '.'
131 131 [255]
132 132
133 133 the common case - no options or filenames
134 134
135 135 $ hg shelve
136 136 shelved as default-01
137 137 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
138 138 $ hg status -C
139 139
140 140 ensure that our shelved changes exist
141 141
142 142 $ hg shelve -l
143 143 default-01 (*)* changes to '[mq]: second.patch' (glob)
144 144 default (*)* changes to '[mq]: second.patch' (glob)
145 145
146 146 $ hg shelve -l -p default
147 147 default (*)* changes to '[mq]: second.patch' (glob)
148 148
149 149 diff --git a/a/a b/a/a
150 150 --- a/a/a
151 151 +++ b/a/a
152 152 @@ -1,1 +1,2 @@
153 153 a
154 154 +a
155 155
156 156 $ hg shelve --list --addremove
157 157 abort: options '--list' and '--addremove' may not be used together
158 158 [255]
159 159
160 160 delete our older shelved change
161 161
162 162 $ hg shelve -d default
163 163 $ hg qfinish -a -q
164 164
165 165 ensure shelve backups aren't overwritten
166 166
167 167 $ ls .hg/shelve-backup/
168 168 default-1.hg
169 169 default-1.patch
170 170 default.hg
171 171 default.patch
172 172
173 173 local edits should not prevent a shelved change from applying
174 174
175 175 $ printf "z\na\n" > a/a
176 176 $ hg unshelve --keep
177 177 unshelving change 'default-01'
178 178 temporarily committing pending changes (restore with 'hg unshelve --abort')
179 179 rebasing shelved changes
180 180 rebasing 4:4702e8911fe0 "changes to '[mq]: second.patch'" (tip)
181 181 merging a/a
182 182
183 183 $ hg revert --all -q
184 184 $ rm a/a.orig b.rename/b c.copy
185 185
186 186 apply it and make sure our state is as expected
187 187
188 188 (this also tests that same timestamp prevents backups from being
189 189 removed, even though there are more than 'maxbackups' backups)
190 190
191 191 $ f -t .hg/shelve-backup/default.hg
192 192 .hg/shelve-backup/default.hg: file
193 193 $ touch -t 200001010000 .hg/shelve-backup/default.hg
194 194 $ f -t .hg/shelve-backup/default-1.hg
195 195 .hg/shelve-backup/default-1.hg: file
196 196 $ touch -t 200001010000 .hg/shelve-backup/default-1.hg
197 197
198 198 $ hg unshelve
199 199 unshelving change 'default-01'
200 200 $ hg status -C
201 201 M a/a
202 202 A b.rename/b
203 203 b/b
204 204 A c.copy
205 205 c
206 206 R b/b
207 207 $ hg shelve -l
208 208
209 209 (both of default.hg and default-1.hg should be still kept, because it
210 210 is difficult to decide actual order of them from same timestamp)
211 211
212 212 $ ls .hg/shelve-backup/
213 213 default-01.hg
214 214 default-01.patch
215 215 default-1.hg
216 216 default-1.patch
217 217 default.hg
218 218 default.patch
219 219
220 220 $ hg unshelve
221 221 abort: no shelved changes to apply!
222 222 [255]
223 223 $ hg unshelve foo
224 224 abort: shelved change 'foo' not found
225 225 [255]
226 226
227 227 named shelves, specific filenames, and "commit messages" should all work
228 228 (this tests also that editor is invoked, if '--edit' is specified)
229 229
230 230 $ hg status -C
231 231 M a/a
232 232 A b.rename/b
233 233 b/b
234 234 A c.copy
235 235 c
236 236 R b/b
237 237 $ HGEDITOR=cat hg shelve -q -n wibble -m wat -e a
238 238 wat
239 239
240 240
241 241 HG: Enter commit message. Lines beginning with 'HG:' are removed.
242 242 HG: Leave message empty to abort commit.
243 243 HG: --
244 244 HG: user: shelve@localhost
245 245 HG: branch 'default'
246 246 HG: changed a/a
247 247
248 248 expect "a" to no longer be present, but status otherwise unchanged
249 249
250 250 $ hg status -C
251 251 A b.rename/b
252 252 b/b
253 253 A c.copy
254 254 c
255 255 R b/b
256 256 $ hg shelve -l --stat
257 257 wibble (*) wat (glob)
258 258 a/a | 1 +
259 259 1 files changed, 1 insertions(+), 0 deletions(-)
260 260
261 261 and now "a/a" should reappear
262 262
263 263 $ cd a
264 264 $ hg unshelve -q wibble
265 265 $ cd ..
266 266 $ hg status -C
267 267 M a/a
268 268 A b.rename/b
269 269 b/b
270 270 A c.copy
271 271 c
272 272 R b/b
273 273
274 274 ensure old shelve backups are being deleted automatically
275 275
276 276 $ ls .hg/shelve-backup/
277 277 default-01.hg
278 278 default-01.patch
279 279 wibble.hg
280 280 wibble.patch
281 281
282 282 cause unshelving to result in a merge with 'a' conflicting
283 283
284 284 $ hg shelve -q
285 285 $ echo c>>a/a
286 286 $ hg commit -m second
287 287 $ hg tip --template '{files}\n'
288 288 a/a
289 289
290 290 add an unrelated change that should be preserved
291 291
292 292 $ mkdir foo
293 293 $ echo foo > foo/foo
294 294 $ hg add foo/foo
295 295
296 296 force a conflicted merge to occur
297 297
298 298 $ hg unshelve
299 299 unshelving change 'default'
300 300 temporarily committing pending changes (restore with 'hg unshelve --abort')
301 301 rebasing shelved changes
302 302 rebasing 5:4702e8911fe0 "changes to '[mq]: second.patch'" (tip)
303 303 merging a/a
304 304 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
305 305 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
306 306 [1]
307 307
308 308 ensure that we have a merge with unresolved conflicts
309 309
310 310 $ hg heads -q --template '{rev}\n'
311 311 5
312 312 4
313 313 $ hg parents -q --template '{rev}\n'
314 314 4
315 315 5
316 316 $ hg status
317 317 M a/a
318 318 M b.rename/b
319 319 M c.copy
320 320 R b/b
321 321 ? a/a.orig
322 322 $ hg diff
323 323 diff --git a/a/a b/a/a
324 324 --- a/a/a
325 325 +++ b/a/a
326 326 @@ -1,2 +1,6 @@
327 327 a
328 328 +<<<<<<< dest: * - shelve: pending changes temporary commit (glob)
329 329 c
330 330 +=======
331 331 +a
332 332 +>>>>>>> source: 4702e8911fe0 - shelve: changes to '[mq]: second.patch'
333 333 diff --git a/b/b b/b.rename/b
334 334 rename from b/b
335 335 rename to b.rename/b
336 336 diff --git a/c b/c.copy
337 337 copy from c
338 338 copy to c.copy
339 339 $ hg resolve -l
340 340 U a/a
341 341
342 342 $ hg shelve
343 343 abort: unshelve already in progress
344 344 (use 'hg unshelve --continue' or 'hg unshelve --abort')
345 345 [255]
346 346
347 347 abort the unshelve and be happy
348 348
349 349 $ hg status
350 350 M a/a
351 351 M b.rename/b
352 352 M c.copy
353 353 R b/b
354 354 ? a/a.orig
355 355 $ hg unshelve -a
356 356 rebase aborted
357 357 unshelve of 'default' aborted
358 358 $ hg heads -q
359 359 3:2e69b451d1ea
360 360 $ hg parents
361 361 changeset: 3:2e69b451d1ea
362 362 tag: tip
363 363 user: test
364 364 date: Thu Jan 01 00:00:00 1970 +0000
365 365 summary: second
366 366
367 367 $ hg resolve -l
368 368 $ hg status
369 369 A foo/foo
370 370 ? a/a.orig
371 371
372 372 try to continue with no unshelve underway
373 373
374 374 $ hg unshelve -c
375 375 abort: no unshelve operation underway
376 376 [255]
377 377 $ hg status
378 378 A foo/foo
379 379 ? a/a.orig
380 380
381 381 redo the unshelve to get a conflict
382 382
383 383 $ hg unshelve -q
384 384 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
385 385 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
386 386 [1]
387 387
388 388 attempt to continue
389 389
390 390 $ hg unshelve -c
391 391 abort: unresolved conflicts, can't continue
392 392 (see 'hg resolve', then 'hg unshelve --continue')
393 393 [255]
394 394
395 395 $ hg revert -r . a/a
396 396 $ hg resolve -m a/a
397 397 (no more unresolved files)
398 398
399 399 $ hg commit -m 'commit while unshelve in progress'
400 400 abort: unshelve already in progress
401 401 (use 'hg unshelve --continue' or 'hg unshelve --abort')
402 402 [255]
403 403
404 404 $ hg unshelve -c
405 405 rebasing 5:4702e8911fe0 "changes to '[mq]: second.patch'" (tip)
406 406 unshelve of 'default' complete
407 407
408 408 ensure the repo is as we hope
409 409
410 410 $ hg parents
411 411 changeset: 3:2e69b451d1ea
412 412 tag: tip
413 413 user: test
414 414 date: Thu Jan 01 00:00:00 1970 +0000
415 415 summary: second
416 416
417 417 $ hg heads -q
418 418 3:2e69b451d1ea
419 419
420 420 $ hg status -C
421 421 A b.rename/b
422 422 b/b
423 423 A c.copy
424 424 c
425 425 A foo/foo
426 426 R b/b
427 427 ? a/a.orig
428 428
429 429 there should be no shelves left
430 430
431 431 $ hg shelve -l
432 432
433 433 #if execbit
434 434
435 435 ensure that metadata-only changes are shelved
436 436
437 437 $ chmod +x a/a
438 438 $ hg shelve -q -n execbit a/a
439 439 $ hg status a/a
440 440 $ hg unshelve -q execbit
441 441 $ hg status a/a
442 442 M a/a
443 443 $ hg revert a/a
444 444
445 445 #endif
446 446
447 447 #if symlink
448 448
449 449 $ rm a/a
450 450 $ ln -s foo a/a
451 451 $ hg shelve -q -n symlink a/a
452 452 $ hg status a/a
453 453 $ hg unshelve -q symlink
454 454 $ hg status a/a
455 455 M a/a
456 456 $ hg revert a/a
457 457
458 458 #endif
459 459
460 460 set up another conflict between a commit and a shelved change
461 461
462 462 $ hg revert -q -C -a
463 463 $ rm a/a.orig b.rename/b c.copy
464 464 $ echo a >> a/a
465 465 $ hg shelve -q
466 466 $ echo x >> a/a
467 467 $ hg ci -m 'create conflict'
468 468 $ hg add foo/foo
469 469
470 470 if we resolve a conflict while unshelving, the unshelve should succeed
471 471
472 472 $ HGMERGE=true hg unshelve
473 473 unshelving change 'default'
474 474 temporarily committing pending changes (restore with 'hg unshelve --abort')
475 475 rebasing shelved changes
476 476 rebasing 6:c5e6910e7601 "changes to 'second'" (tip)
477 477 merging a/a
478 478 note: rebase of 6:c5e6910e7601 created no changes to commit
479 479 $ hg parents -q
480 480 4:33f7f61e6c5e
481 481 $ hg shelve -l
482 482 $ hg status
483 483 A foo/foo
484 484 $ cat a/a
485 485 a
486 486 c
487 487 x
488 488
489 489 test keep and cleanup
490 490
491 491 $ hg shelve
492 492 shelved as default
493 493 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
494 494 $ hg shelve --list
495 495 default (*) changes to 'create conflict' (glob)
496 496 $ hg unshelve --keep
497 497 unshelving change 'default'
498 498 $ hg shelve --list
499 499 default (*) changes to 'create conflict' (glob)
500 500 $ hg shelve --cleanup
501 501 $ hg shelve --list
502 502
503 503 $ hg shelve --cleanup --delete
504 504 abort: options '--cleanup' and '--delete' may not be used together
505 505 [255]
506 506 $ hg shelve --cleanup --patch
507 507 abort: options '--cleanup' and '--patch' may not be used together
508 508 [255]
509 509 $ hg shelve --cleanup --message MESSAGE
510 510 abort: options '--cleanup' and '--message' may not be used together
511 511 [255]
512 512
513 513 test bookmarks
514 514
515 515 $ hg bookmark test
516 516 $ hg bookmark
517 517 * test 4:33f7f61e6c5e
518 518 $ hg shelve
519 519 shelved as test
520 520 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
521 521 $ hg bookmark
522 522 * test 4:33f7f61e6c5e
523 523 $ hg unshelve
524 524 unshelving change 'test'
525 525 $ hg bookmark
526 526 * test 4:33f7f61e6c5e
527 527
528 528 shelve should still work even if mq is disabled
529 529
530 530 $ hg --config extensions.mq=! shelve
531 531 shelved as test
532 532 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
533 533 $ hg --config extensions.mq=! shelve --list
534 534 test (*) changes to 'create conflict' (glob)
535 535 $ hg bookmark
536 536 * test 4:33f7f61e6c5e
537 537 $ hg --config extensions.mq=! unshelve
538 538 unshelving change 'test'
539 539 $ hg bookmark
540 540 * test 4:33f7f61e6c5e
541 541
542 542 shelve should leave dirstate clean (issue4055)
543 543
544 544 $ cd ..
545 545 $ hg init shelverebase
546 546 $ cd shelverebase
547 547 $ printf 'x\ny\n' > x
548 548 $ echo z > z
549 549 $ hg commit -Aqm xy
550 550 $ echo z >> x
551 551 $ hg commit -Aqm z
552 552 $ hg up 0
553 553 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
554 554 $ printf 'a\nx\ny\nz\n' > x
555 555 $ hg commit -Aqm xyz
556 556 $ echo c >> z
557 557 $ hg shelve
558 558 shelved as default
559 559 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
560 560 $ hg rebase -d 1 --config extensions.rebase=
561 561 rebasing 2:323bfa07f744 "xyz" (tip)
562 562 merging x
563 563 saved backup bundle to $TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-78114325-backup.hg (glob)
564 564 $ hg unshelve
565 565 unshelving change 'default'
566 566 rebasing shelved changes
567 567 rebasing 4:b8fefe789ed0 "changes to 'xyz'" (tip)
568 568 $ hg status
569 569 M z
570 570
571 571 $ cd ..
572 572
573 573 shelve should only unshelve pending changes (issue4068)
574 574
575 575 $ hg init onlypendingchanges
576 576 $ cd onlypendingchanges
577 577 $ touch a
578 578 $ hg ci -Aqm a
579 579 $ touch b
580 580 $ hg ci -Aqm b
581 581 $ hg up -q 0
582 582 $ touch c
583 583 $ hg ci -Aqm c
584 584
585 585 $ touch d
586 586 $ hg add d
587 587 $ hg shelve
588 588 shelved as default
589 589 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
590 590 $ hg up -q 1
591 591 $ hg unshelve
592 592 unshelving change 'default'
593 593 rebasing shelved changes
594 594 rebasing 3:0cae6656c016 "changes to 'c'" (tip)
595 595 $ hg status
596 596 A d
597 597
598 598 unshelve should work on an ancestor of the original commit
599 599
600 600 $ hg shelve
601 601 shelved as default
602 602 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
603 603 $ hg up 0
604 604 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
605 605 $ hg unshelve
606 606 unshelving change 'default'
607 607 rebasing shelved changes
608 608 rebasing 3:be58f65f55fb "changes to 'b'" (tip)
609 609 $ hg status
610 610 A d
611 611
612 612 test bug 4073 we need to enable obsolete markers for it
613 613
614 614 $ cat >> $HGRCPATH << EOF
615 615 > [experimental]
616 616 > evolution=createmarkers
617 617 > EOF
618 618 $ hg shelve
619 619 shelved as default
620 620 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
621 621 $ hg debugobsolete `hg --debug id -i -r 1`
622 622 $ hg unshelve
623 623 unshelving change 'default'
624 624
625 625 unshelve should leave unknown files alone (issue4113)
626 626
627 627 $ echo e > e
628 628 $ hg shelve
629 629 shelved as default
630 630 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
631 631 $ hg status
632 632 ? e
633 633 $ hg unshelve
634 634 unshelving change 'default'
635 635 $ hg status
636 636 A d
637 637 ? e
638 638 $ cat e
639 639 e
640 640
641 641 unshelve should keep a copy of unknown files
642 642
643 643 $ hg add e
644 644 $ hg shelve
645 645 shelved as default
646 646 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
647 647 $ echo z > e
648 648 $ hg unshelve
649 649 unshelving change 'default'
650 650 $ cat e
651 651 e
652 652 $ cat e.orig
653 653 z
654 654
655 655
656 656 unshelve and conflicts with tracked and untracked files
657 657
658 658 preparing:
659 659
660 660 $ rm *.orig
661 661 $ hg ci -qm 'commit stuff'
662 662 $ hg phase -p null:
663 663
664 664 no other changes - no merge:
665 665
666 666 $ echo f > f
667 667 $ hg add f
668 668 $ hg shelve
669 669 shelved as default
670 670 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
671 671 $ echo g > f
672 672 $ hg unshelve
673 673 unshelving change 'default'
674 674 $ hg st
675 675 A f
676 676 ? f.orig
677 677 $ cat f
678 678 f
679 679 $ cat f.orig
680 680 g
681 681
682 682 other uncommitted changes - merge:
683 683
684 684 $ hg st
685 685 A f
686 686 ? f.orig
687 687 $ hg shelve
688 688 shelved as default
689 689 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
690 690 $ hg log -G --template '{rev} {desc|firstline} {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()'
691 691 o 4 changes to 'commit stuff' shelve@localhost
692 692 |
693 693 $ hg log -G --template '{rev} {desc|firstline} {author}'
694 694 @ 3 commit stuff test
695 695 |
696 696 | o 2 c test
697 697 |/
698 698 o 0 a test
699 699
700 700 $ mv f.orig f
701 701 $ echo 1 > a
702 702 $ hg unshelve --date '1073741824 0'
703 703 unshelving change 'default'
704 704 temporarily committing pending changes (restore with 'hg unshelve --abort')
705 705 rebasing shelved changes
706 706 rebasing 5:23b29cada8ba "changes to 'commit stuff'" (tip)
707 707 merging f
708 708 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
709 709 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
710 710 [1]
711 711 $ hg log -G --template '{rev} {desc|firstline} {author} {date|isodate}'
712 712 @ 5 changes to 'commit stuff' shelve@localhost 1970-01-01 00:00 +0000
713 713 |
714 714 | @ 4 pending changes temporary commit shelve@localhost 2004-01-10 13:37 +0000
715 715 |/
716 716 o 3 commit stuff test 1970-01-01 00:00 +0000
717 717 |
718 718 | o 2 c test 1970-01-01 00:00 +0000
719 719 |/
720 720 o 0 a test 1970-01-01 00:00 +0000
721 721
722 722 $ hg st
723 723 M f
724 724 ? f.orig
725 725 $ cat f
726 726 <<<<<<< dest: 5f6b880e719b - shelve: pending changes temporary commit
727 727 g
728 728 =======
729 729 f
730 730 >>>>>>> source: 23b29cada8ba - shelve: changes to 'commit stuff'
731 731 $ cat f.orig
732 732 g
733 733 $ hg unshelve --abort
734 734 rebase aborted
735 735 unshelve of 'default' aborted
736 736 $ hg st
737 737 M a
738 738 ? f.orig
739 739 $ cat f.orig
740 740 g
741 741 $ hg unshelve
742 742 unshelving change 'default'
743 743 temporarily committing pending changes (restore with 'hg unshelve --abort')
744 744 rebasing shelved changes
745 745 rebasing 5:23b29cada8ba "changes to 'commit stuff'" (tip)
746 746 $ hg st
747 747 M a
748 748 A f
749 749 ? f.orig
750 750
751 751 other committed changes - merge:
752 752
753 753 $ hg shelve f
754 754 shelved as default
755 755 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
756 756 $ hg ci a -m 'intermediate other change'
757 757 $ mv f.orig f
758 758 $ hg unshelve
759 759 unshelving change 'default'
760 760 rebasing shelved changes
761 761 rebasing 5:23b29cada8ba "changes to 'commit stuff'" (tip)
762 762 merging f
763 763 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
764 764 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
765 765 [1]
766 766 $ hg st
767 767 M f
768 768 ? f.orig
769 769 $ cat f
770 770 <<<<<<< dest: * - test: intermediate other change (glob)
771 771 g
772 772 =======
773 773 f
774 774 >>>>>>> source: 23b29cada8ba - shelve: changes to 'commit stuff'
775 775 $ cat f.orig
776 776 g
777 777 $ hg unshelve --abort
778 778 rebase aborted
779 779 unshelve of 'default' aborted
780 780 $ hg st
781 781 ? f.orig
782 782 $ cat f.orig
783 783 g
784 784 $ hg shelve --delete default
785 785
786 786 Recreate some conflict again
787 787
788 788 $ cd ../repo
789 789 $ hg up -C -r 3
790 790 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
791 791 (leaving bookmark test)
792 792 $ echo y >> a/a
793 793 $ hg shelve
794 794 shelved as default
795 795 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
796 796 $ hg up test
797 797 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
798 798 (activating bookmark test)
799 799 $ hg bookmark
800 800 * test 4:33f7f61e6c5e
801 801 $ hg unshelve
802 802 unshelving change 'default'
803 803 rebasing shelved changes
804 804 rebasing 5:4b555fdb4e96 "changes to 'second'" (tip)
805 805 merging a/a
806 806 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
807 807 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
808 808 [1]
809 809 $ hg bookmark
810 810 test 4:33f7f61e6c5e
811 811
812 812 Test that resolving all conflicts in one direction (so that the rebase
813 813 is a no-op), works (issue4398)
814 814
815 815 $ hg revert -a -r .
816 816 reverting a/a (glob)
817 817 $ hg resolve -m a/a
818 818 (no more unresolved files)
819 819 $ hg unshelve -c
820 820 rebasing 5:4b555fdb4e96 "changes to 'second'" (tip)
821 821 note: rebase of 5:4b555fdb4e96 created no changes to commit
822 822 unshelve of 'default' complete
823 823 $ hg bookmark
824 824 * test 4:33f7f61e6c5e
825 825 $ hg diff
826 826 $ hg status
827 827 ? a/a.orig
828 828 ? foo/foo
829 829 $ hg summary
830 830 parent: 4:33f7f61e6c5e tip
831 831 create conflict
832 832 branch: default
833 833 bookmarks: *test
834 834 commit: 2 unknown (clean)
835 835 update: (current)
836 836 phases: 5 draft
837 837
838 838 $ hg shelve --delete --stat
839 839 abort: options '--delete' and '--stat' may not be used together
840 840 [255]
841 841 $ hg shelve --delete --name NAME
842 842 abort: options '--delete' and '--name' may not be used together
843 843 [255]
844 844
845 845 Test interactive shelve
846 846 $ cat <<EOF >> $HGRCPATH
847 847 > [ui]
848 848 > interactive = true
849 849 > EOF
850 850 $ echo 'a' >> a/b
851 851 $ cat a/a >> a/b
852 852 $ echo 'x' >> a/b
853 853 $ mv a/b a/a
854 854 $ echo 'a' >> foo/foo
855 855 $ hg st
856 856 M a/a
857 857 ? a/a.orig
858 858 ? foo/foo
859 859 $ cat a/a
860 860 a
861 861 a
862 862 c
863 863 x
864 864 x
865 865 $ cat foo/foo
866 866 foo
867 867 a
868 868 $ hg shelve --interactive --config ui.interactive=false
869 869 abort: running non-interactively
870 870 [255]
871 871 $ hg shelve --interactive << EOF
872 872 > y
873 873 > y
874 874 > n
875 875 > EOF
876 876 diff --git a/a/a b/a/a
877 877 2 hunks, 2 lines changed
878 878 examine changes to 'a/a'? [Ynesfdaq?] y
879 879
880 880 @@ -1,3 +1,4 @@
881 881 +a
882 882 a
883 883 c
884 884 x
885 885 record change 1/2 to 'a/a'? [Ynesfdaq?] y
886 886
887 887 @@ -1,3 +2,4 @@
888 888 a
889 889 c
890 890 x
891 891 +x
892 892 record change 2/2 to 'a/a'? [Ynesfdaq?] n
893 893
894 894 shelved as test
895 895 merging a/a
896 896 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
897 897 $ cat a/a
898 898 a
899 899 c
900 900 x
901 901 x
902 902 $ cat foo/foo
903 903 foo
904 904 a
905 905 $ hg st
906 906 M a/a
907 907 ? foo/foo
908 908 $ hg bookmark
909 909 * test 4:33f7f61e6c5e
910 910 $ hg unshelve
911 911 unshelving change 'test'
912 912 temporarily committing pending changes (restore with 'hg unshelve --abort')
913 913 rebasing shelved changes
914 914 rebasing 6:65b5d1c34c34 "changes to 'create conflict'" (tip)
915 915 merging a/a
916 916 $ hg bookmark
917 917 * test 4:33f7f61e6c5e
918 918 $ cat a/a
919 919 a
920 920 a
921 921 c
922 922 x
923 923 x
924 924
925 925 shelve --patch and shelve --stat should work with a single valid shelfname
926 926
927 927 $ hg up --clean .
928 928 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
929 929 (leaving bookmark test)
930 930 $ hg shelve --list
931 931 $ echo 'patch a' > shelf-patch-a
932 932 $ hg add shelf-patch-a
933 933 $ hg shelve
934 934 shelved as default
935 935 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
936 936 $ echo 'patch b' > shelf-patch-b
937 937 $ hg add shelf-patch-b
938 938 $ hg shelve
939 939 shelved as default-01
940 940 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
941 941 $ hg shelve --patch default default-01
942 942 abort: --patch expects a single shelf
943 943 [255]
944 944 $ hg shelve --stat default default-01
945 945 abort: --stat expects a single shelf
946 946 [255]
947 947 $ hg shelve --patch default
948 948 default (* ago) changes to 'create conflict' (glob)
949 949
950 950 diff --git a/shelf-patch-a b/shelf-patch-a
951 951 new file mode 100644
952 952 --- /dev/null
953 953 +++ b/shelf-patch-a
954 954 @@ -0,0 +1,1 @@
955 955 +patch a
956 956 $ hg shelve --stat default
957 957 default (* ago) changes to 'create conflict' (glob)
958 958 shelf-patch-a | 1 +
959 959 1 files changed, 1 insertions(+), 0 deletions(-)
960 960 $ hg shelve --patch nonexistentshelf
961 961 abort: cannot find shelf nonexistentshelf
962 962 [255]
963 963 $ hg shelve --stat nonexistentshelf
964 964 abort: cannot find shelf nonexistentshelf
965 965 [255]
966 966
967 967 $ cd ..
968 968
969 969 Shelve from general delta repo uses bundle2 on disk
970 970 --------------------------------------------------
971 971
972 972 no general delta
973 973
974 974 $ hg clone --pull repo bundle1 --config format.generaldelta=0
975 975 requesting all changes
976 976 adding changesets
977 977 adding manifests
978 978 adding file changes
979 979 added 5 changesets with 8 changes to 6 files
980 980 updating to branch default
981 981 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
982 982 $ cd bundle1
983 983 $ echo babar > jungle
984 984 $ hg add jungle
985 985 $ hg shelve
986 986 shelved as default
987 987 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
988 988 $ hg debugbundle .hg/shelved/*.hg
989 989 7e30d8ac6f23cfc84330fd7e698730374615d21a
990 990 $ cd ..
991 991
992 992 with general delta
993 993
994 994 $ hg clone --pull repo bundle2 --config format.generaldelta=1
995 995 requesting all changes
996 996 adding changesets
997 997 adding manifests
998 998 adding file changes
999 999 added 5 changesets with 8 changes to 6 files
1000 1000 updating to branch default
1001 1001 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1002 1002 $ cd bundle2
1003 1003 $ echo babar > jungle
1004 1004 $ hg add jungle
1005 1005 $ hg shelve
1006 1006 shelved as default
1007 1007 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1008 1008 $ hg debugbundle .hg/shelved/*.hg
1009 1009 Stream params: {'Compression': 'BZ'}
1010 1010 changegroup -- "{'version': '02'}"
1011 1011 7e30d8ac6f23cfc84330fd7e698730374615d21a
1012 1012 $ cd ..
1013 1013
1014 1014 Test visibility of in-memory changes inside transaction to external hook
1015 1015 ------------------------------------------------------------------------
1016 1016
1017 1017 $ cd repo
1018 1018
1019 1019 $ echo xxxx >> x
1020 1020 $ hg commit -m "#5: changes to invoke rebase"
1021 1021
1022 1022 $ cat > $TESTTMP/checkvisibility.sh <<EOF
1023 1023 > echo "==== \$1:"
1024 1024 > hg parents --template "VISIBLE {rev}:{node|short}\n"
1025 1025 > # test that pending changes are hidden
1026 1026 > unset HG_PENDING
1027 1027 > hg parents --template "ACTUAL {rev}:{node|short}\n"
1028 1028 > echo "===="
1029 1029 > EOF
1030 1030
1031 1031 $ cat >> .hg/hgrc <<EOF
1032 1032 > [defaults]
1033 1033 > # to fix hash id of temporary revisions
1034 1034 > unshelve = --date '0 0'
1035 1035 > EOF
1036 1036
1037 1037 "hg unshelve" at REV5 implies steps below:
1038 1038
1039 1039 (1) commit changes in the working directory (REV6)
1040 1040 (2) unbundle shelved revision (REV7)
1041 1041 (3) rebase: merge REV7 into REV6 (REV6 => REV6, REV7)
1042 1042 (4) rebase: commit merged revision (REV8)
1043 1043 (5) rebase: update to REV6 (REV8 => REV6)
1044 1044 (6) update to REV5 (REV6 => REV5)
1045 1045 (7) abort transaction
1046 1046
1047 1047 == test visibility to external preupdate hook
1048 1048
1049 1049 $ cat >> .hg/hgrc <<EOF
1050 1050 > [hooks]
1051 1051 > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate
1052 1052 > EOF
1053 1053
1054 1054 $ echo nnnn >> n
1055 1055
1056 1056 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1057 1057 ==== before-unshelving:
1058 1058 VISIBLE 5:703117a2acfb
1059 1059 ACTUAL 5:703117a2acfb
1060 1060 ====
1061 1061
1062 1062 $ hg unshelve --keep default
1063 1063 temporarily committing pending changes (restore with 'hg unshelve --abort')
1064 1064 rebasing shelved changes
1065 1065 rebasing 7:fcbb97608399 "changes to 'create conflict'" (tip)
1066 1066 ==== preupdate:
1067 1067 VISIBLE 6:66b86db80ee4
1068 1068 ACTUAL 5:703117a2acfb
1069 1069 ====
1070 1070 ==== preupdate:
1071 1071 VISIBLE 8:cb2a4e59c2d5
1072 1072 ACTUAL 5:703117a2acfb
1073 1073 ====
1074 1074 ==== preupdate:
1075 1075 VISIBLE 6:66b86db80ee4
1076 1076 ACTUAL 5:703117a2acfb
1077 1077 ====
1078 1078
1079 1079 $ cat >> .hg/hgrc <<EOF
1080 1080 > [hooks]
1081 1081 > preupdate.visibility =
1082 1082 > EOF
1083 1083
1084 1084 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1085 1085 ==== after-unshelving:
1086 1086 VISIBLE 5:703117a2acfb
1087 1087 ACTUAL 5:703117a2acfb
1088 1088 ====
1089 1089
1090 1090 == test visibility to external update hook
1091 1091
1092 1092 $ hg update -q -C 5
1093 1093
1094 1094 $ cat >> .hg/hgrc <<EOF
1095 1095 > [hooks]
1096 1096 > update.visibility = sh $TESTTMP/checkvisibility.sh update
1097 1097 > EOF
1098 1098
1099 1099 $ echo nnnn >> n
1100 1100
1101 1101 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1102 1102 ==== before-unshelving:
1103 1103 VISIBLE 5:703117a2acfb
1104 1104 ACTUAL 5:703117a2acfb
1105 1105 ====
1106 1106
1107 1107 $ hg unshelve --keep default
1108 1108 temporarily committing pending changes (restore with 'hg unshelve --abort')
1109 1109 rebasing shelved changes
1110 1110 rebasing 7:fcbb97608399 "changes to 'create conflict'" (tip)
1111 1111 ==== update:
1112 1112 VISIBLE 6:66b86db80ee4
1113 1113 VISIBLE 7:fcbb97608399
1114 1114 ACTUAL 5:703117a2acfb
1115 1115 ====
1116 1116 ==== update:
1117 1117 VISIBLE 6:66b86db80ee4
1118 1118 ACTUAL 5:703117a2acfb
1119 1119 ====
1120 1120 ==== update:
1121 1121 VISIBLE 5:703117a2acfb
1122 1122 ACTUAL 5:703117a2acfb
1123 1123 ====
1124 1124
1125 1125 $ cat >> .hg/hgrc <<EOF
1126 1126 > [hooks]
1127 1127 > update.visibility =
1128 1128 > EOF
1129 1129
1130 1130 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1131 1131 ==== after-unshelving:
1132 1132 VISIBLE 5:703117a2acfb
1133 1133 ACTUAL 5:703117a2acfb
1134 1134 ====
1135 1135
1136 1136 $ cd ..
1137 1137
1138 1138 test Abort unshelve always gets user out of the unshelved state
1139 1139 ---------------------------------------------------------------
1140 1140 $ hg init salvage
1141 1141 $ cd salvage
1142 1142 $ echo 'content' > root
1143 1143 $ hg commit -A -m 'root' -q
1144 1144 $ echo '' > root
1145 1145 $ hg shelve -q
1146 1146 $ echo 'contADDent' > root
1147 1147 $ hg unshelve -q
1148 1148 warning: conflicts while merging root! (edit, then use 'hg resolve --mark')
1149 1149 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1150 1150 [1]
1151 1151 Wreak havoc on the unshelve process
1152 1152 $ rm .hg/unshelverebasestate
1153 1153 $ hg unshelve --abort
1154 1154 unshelve of 'default' aborted
1155 1155 abort: No such file or directory
1156 1156 [255]
1157 1157 Can the user leave the current state?
1158 1158 $ hg up -C .
1159 1159 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1160 1160
1161 1161 Try again but with a corrupted shelve state file
1162 1162 $ hg strip -r 2 -r 1 -q
1163 1163 $ hg up -r 0 -q
1164 1164 $ echo '' > root
1165 1165 $ hg shelve -q
1166 1166 $ echo 'contADDent' > root
1167 1167 $ hg unshelve -q
1168 1168 warning: conflicts while merging root! (edit, then use 'hg resolve --mark')
1169 1169 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1170 1170 [1]
1171 1171 $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate
1172 1172 $ mv ../corrupt-shelvedstate .hg/histedit-state
1173 $ hg unshelve --abort |& grep 'rebase aborted'
1173 $ hg unshelve --abort 2>&1 | grep 'rebase aborted'
1174 1174 rebase aborted
1175 1175 $ hg up -C .
1176 1176 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
General Comments 0
You need to be logged in to leave comments. Login now