##// END OF EJS Templates
tests: make test-shelve.t timing-independent...
Martin von Zweigbergk -
r31228:51934fc7 default
parent child Browse files
Show More
@@ -1,1739 +1,1739 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 In bare shelve (when no files are specified, without interactive, include
40 40 and exclude option), shelving remembers information if the working
41 41 directory was on newly created branch, in other words working directory
42 42 was on different branch than its first parent. In this situation
43 43 unshelving restores branch information to the working directory.
44 44
45 45 Each shelved change has a name that makes it easier to find later. The
46 46 name of a shelved change defaults to being based on the active bookmark,
47 47 or if there is no active bookmark, the current named branch. To specify a
48 48 different name, use "--name".
49 49
50 50 To see a list of existing shelved changes, use the "--list" option. For
51 51 each shelved change, this will print its name, age, and description; use "
52 52 --patch" or "--stat" for more details.
53 53
54 54 To delete specific shelved changes, use "--delete". To delete all shelved
55 55 changes, use "--cleanup".
56 56
57 57 (use 'hg help -e shelve' to show help for the shelve extension)
58 58
59 59 options ([+] can be repeated):
60 60
61 61 -A --addremove mark new/missing files as added/removed before
62 62 shelving
63 63 -u --unknown store unknown files in the shelve
64 64 --cleanup delete all shelved changes
65 65 --date DATE shelve with the specified commit date
66 66 -d --delete delete the named shelved change(s)
67 67 -e --edit invoke editor on commit messages
68 68 -l --list list current shelves
69 69 -m --message TEXT use text as shelve message
70 70 -n --name NAME use the given name for the shelved commit
71 71 -p --patch show patch
72 72 -i --interactive interactive mode, only works while creating a shelve
73 73 --stat output diffstat-style summary of changes
74 74 -I --include PATTERN [+] include names matching the given patterns
75 75 -X --exclude PATTERN [+] exclude names matching the given patterns
76 76 --mq operate on patch repository
77 77
78 78 (some details hidden, use --verbose to show complete help)
79 79
80 80 shelving in an empty repo should be possible
81 81 (this tests also that editor is not invoked, if '--edit' is not
82 82 specified)
83 83
84 84 $ HGEDITOR=cat hg shelve
85 85 shelved as default
86 86 0 files updated, 0 files merged, 5 files removed, 0 files unresolved
87 87
88 88 $ hg unshelve
89 89 unshelving change 'default'
90 90
91 91 $ hg commit -q -m 'initial commit'
92 92
93 93 $ hg shelve
94 94 nothing changed
95 95 [1]
96 96
97 97 make sure shelve files were backed up
98 98
99 99 $ ls .hg/shelve-backup
100 100 default.hg
101 101 default.patch
102 102
103 103 checks to make sure we dont create a directory or
104 104 hidden file while choosing a new shelve name
105 105
106 106 when we are given a name
107 107
108 108 $ hg shelve -n foo/bar
109 109 abort: shelved change names can not contain slashes
110 110 [255]
111 111 $ hg shelve -n .baz
112 112 abort: shelved change names can not start with '.'
113 113 [255]
114 114 $ hg shelve -n foo\\bar
115 115 abort: shelved change names can not contain slashes
116 116 [255]
117 117
118 118 when shelve has to choose itself
119 119
120 120 $ hg branch x/y -q
121 121 $ hg commit -q -m "Branch commit 0"
122 122 $ hg shelve
123 123 nothing changed
124 124 [1]
125 125 $ hg branch .x -q
126 126 $ hg commit -q -m "Branch commit 1"
127 127 $ hg shelve
128 128 nothing changed
129 129 [1]
130 130 $ hg branch x\\y -q
131 131 $ hg commit -q -m "Branch commit 2"
132 132 $ hg shelve
133 133 nothing changed
134 134 [1]
135 135
136 136 cleaning the branches made for name checking tests
137 137
138 138 $ hg up default -q
139 139 $ hg strip 3 -q
140 140 $ hg strip 2 -q
141 141 $ hg strip 1 -q
142 142
143 143 create an mq patch - shelving should work fine with a patch applied
144 144
145 145 $ echo n > n
146 146 $ hg add n
147 147 $ hg commit n -m second
148 148 $ hg qnew second.patch
149 149
150 150 shelve a change that we will delete later
151 151
152 152 $ echo a >> a/a
153 153 $ hg shelve
154 154 shelved as default
155 155 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
156 156
157 157 set up some more complex changes to shelve
158 158
159 159 $ echo a >> a/a
160 160 $ hg mv b b.rename
161 161 moving b/b to b.rename/b (glob)
162 162 $ hg cp c c.copy
163 163 $ hg status -C
164 164 M a/a
165 165 A b.rename/b
166 166 b/b
167 167 A c.copy
168 168 c
169 169 R b/b
170 170
171 171 the common case - no options or filenames
172 172
173 173 $ hg shelve
174 174 shelved as default-01
175 175 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
176 176 $ hg status -C
177 177
178 178 ensure that our shelved changes exist
179 179
180 180 $ hg shelve -l
181 181 default-01 (*)* changes to: [mq]: second.patch (glob)
182 182 default (*)* changes to: [mq]: second.patch (glob)
183 183
184 184 $ hg shelve -l -p default
185 185 default (*)* changes to: [mq]: second.patch (glob)
186 186
187 187 diff --git a/a/a b/a/a
188 188 --- a/a/a
189 189 +++ b/a/a
190 190 @@ -1,1 +1,2 @@
191 191 a
192 192 +a
193 193
194 194 $ hg shelve --list --addremove
195 195 abort: options '--list' and '--addremove' may not be used together
196 196 [255]
197 197
198 198 delete our older shelved change
199 199
200 200 $ hg shelve -d default
201 201 $ hg qfinish -a -q
202 202
203 203 ensure shelve backups aren't overwritten
204 204
205 205 $ ls .hg/shelve-backup/
206 206 default-1.hg
207 207 default-1.patch
208 208 default.hg
209 209 default.patch
210 210
211 211 local edits should not prevent a shelved change from applying
212 212
213 213 $ printf "z\na\n" > a/a
214 214 $ hg unshelve --keep
215 215 unshelving change 'default-01'
216 216 temporarily committing pending changes (restore with 'hg unshelve --abort')
217 217 rebasing shelved changes
218 218 rebasing 4:32c69314e062 "changes to: [mq]: second.patch" (tip)
219 219 merging a/a
220 220
221 221 $ hg revert --all -q
222 222 $ rm a/a.orig b.rename/b c.copy
223 223
224 224 apply it and make sure our state is as expected
225 225
226 226 (this also tests that same timestamp prevents backups from being
227 227 removed, even though there are more than 'maxbackups' backups)
228 228
229 229 $ f -t .hg/shelve-backup/default.patch
230 230 .hg/shelve-backup/default.patch: file
231 231 $ touch -t 200001010000 .hg/shelve-backup/default.patch
232 232 $ f -t .hg/shelve-backup/default-1.patch
233 233 .hg/shelve-backup/default-1.patch: file
234 234 $ touch -t 200001010000 .hg/shelve-backup/default-1.patch
235 235
236 236 $ hg unshelve
237 237 unshelving change 'default-01'
238 238 $ hg status -C
239 239 M a/a
240 240 A b.rename/b
241 241 b/b
242 242 A c.copy
243 243 c
244 244 R b/b
245 245 $ hg shelve -l
246 246
247 247 (both of default.hg and default-1.hg should be still kept, because it
248 248 is difficult to decide actual order of them from same timestamp)
249 249
250 250 $ ls .hg/shelve-backup/
251 251 default-01.hg
252 252 default-01.patch
253 253 default-1.hg
254 254 default-1.patch
255 255 default.hg
256 256 default.patch
257 257
258 258 $ hg unshelve
259 259 abort: no shelved changes to apply!
260 260 [255]
261 261 $ hg unshelve foo
262 262 abort: shelved change 'foo' not found
263 263 [255]
264 264
265 265 named shelves, specific filenames, and "commit messages" should all work
266 266 (this tests also that editor is invoked, if '--edit' is specified)
267 267
268 268 $ hg status -C
269 269 M a/a
270 270 A b.rename/b
271 271 b/b
272 272 A c.copy
273 273 c
274 274 R b/b
275 275 $ HGEDITOR=cat hg shelve -q -n wibble -m wat -e a
276 276 wat
277 277
278 278
279 279 HG: Enter commit message. Lines beginning with 'HG:' are removed.
280 280 HG: Leave message empty to abort commit.
281 281 HG: --
282 282 HG: user: shelve@localhost
283 283 HG: branch 'default'
284 284 HG: changed a/a
285 285
286 286 expect "a" to no longer be present, but status otherwise unchanged
287 287
288 288 $ hg status -C
289 289 A b.rename/b
290 290 b/b
291 291 A c.copy
292 292 c
293 293 R b/b
294 294 $ hg shelve -l --stat
295 295 wibble (*) wat (glob)
296 296 a/a | 1 +
297 297 1 files changed, 1 insertions(+), 0 deletions(-)
298 298
299 299 and now "a/a" should reappear
300 300
301 301 $ cd a
302 302 $ hg unshelve -q wibble
303 303 $ cd ..
304 304 $ hg status -C
305 305 M a/a
306 306 A b.rename/b
307 307 b/b
308 308 A c.copy
309 309 c
310 310 R b/b
311 311
312 312 ensure old shelve backups are being deleted automatically
313 313
314 314 $ ls .hg/shelve-backup/
315 315 default-01.hg
316 316 default-01.patch
317 317 wibble.hg
318 318 wibble.patch
319 319
320 320 cause unshelving to result in a merge with 'a' conflicting
321 321
322 322 $ hg shelve -q
323 323 $ echo c>>a/a
324 324 $ hg commit -m second
325 325 $ hg tip --template '{files}\n'
326 326 a/a
327 327
328 328 add an unrelated change that should be preserved
329 329
330 330 $ mkdir foo
331 331 $ echo foo > foo/foo
332 332 $ hg add foo/foo
333 333
334 334 force a conflicted merge to occur
335 335
336 336 $ hg unshelve
337 337 unshelving change 'default'
338 338 temporarily committing pending changes (restore with 'hg unshelve --abort')
339 339 rebasing shelved changes
340 340 rebasing 5:32c69314e062 "changes to: [mq]: second.patch" (tip)
341 341 merging a/a
342 342 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
343 343 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
344 344 [1]
345 345
346 346 ensure that we have a merge with unresolved conflicts
347 347
348 348 $ hg heads -q --template '{rev}\n'
349 349 5
350 350 4
351 351 $ hg parents -q --template '{rev}\n'
352 352 4
353 353 5
354 354 $ hg status
355 355 M a/a
356 356 M b.rename/b
357 357 M c.copy
358 358 R b/b
359 359 ? a/a.orig
360 360 $ hg diff
361 361 diff --git a/a/a b/a/a
362 362 --- a/a/a
363 363 +++ b/a/a
364 364 @@ -1,2 +1,6 @@
365 365 a
366 366 +<<<<<<< dest: * - shelve: pending changes temporary commit (glob)
367 367 c
368 368 +=======
369 369 +a
370 370 +>>>>>>> source: 32c69314e062 - shelve: changes to: [mq]: second.patch
371 371 diff --git a/b/b b/b.rename/b
372 372 rename from b/b
373 373 rename to b.rename/b
374 374 diff --git a/c b/c.copy
375 375 copy from c
376 376 copy to c.copy
377 377 $ hg resolve -l
378 378 U a/a
379 379
380 380 $ hg shelve
381 381 abort: unshelve already in progress
382 382 (use 'hg unshelve --continue' or 'hg unshelve --abort')
383 383 [255]
384 384
385 385 abort the unshelve and be happy
386 386
387 387 $ hg status
388 388 M a/a
389 389 M b.rename/b
390 390 M c.copy
391 391 R b/b
392 392 ? a/a.orig
393 393 $ hg unshelve -a
394 394 rebase aborted
395 395 unshelve of 'default' aborted
396 396 $ hg heads -q
397 397 3:2e69b451d1ea
398 398 $ hg parents
399 399 changeset: 3:2e69b451d1ea
400 400 tag: tip
401 401 user: test
402 402 date: Thu Jan 01 00:00:00 1970 +0000
403 403 summary: second
404 404
405 405 $ hg resolve -l
406 406 $ hg status
407 407 A foo/foo
408 408 ? a/a.orig
409 409
410 410 try to continue with no unshelve underway
411 411
412 412 $ hg unshelve -c
413 413 abort: no unshelve in progress
414 414 [255]
415 415 $ hg status
416 416 A foo/foo
417 417 ? a/a.orig
418 418
419 419 redo the unshelve to get a conflict
420 420
421 421 $ hg unshelve -q
422 422 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
423 423 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
424 424 [1]
425 425
426 426 attempt to continue
427 427
428 428 $ hg unshelve -c
429 429 abort: unresolved conflicts, can't continue
430 430 (see 'hg resolve', then 'hg unshelve --continue')
431 431 [255]
432 432
433 433 $ hg revert -r . a/a
434 434 $ hg resolve -m a/a
435 435 (no more unresolved files)
436 436 continue: hg unshelve --continue
437 437
438 438 $ hg commit -m 'commit while unshelve in progress'
439 439 abort: unshelve already in progress
440 440 (use 'hg unshelve --continue' or 'hg unshelve --abort')
441 441 [255]
442 442
443 443 $ hg graft --continue
444 444 abort: no graft in progress
445 445 (continue: hg unshelve --continue)
446 446 [255]
447 447 $ hg unshelve -c
448 448 rebasing 5:32c69314e062 "changes to: [mq]: second.patch" (tip)
449 449 unshelve of 'default' complete
450 450
451 451 ensure the repo is as we hope
452 452
453 453 $ hg parents
454 454 changeset: 3:2e69b451d1ea
455 455 tag: tip
456 456 user: test
457 457 date: Thu Jan 01 00:00:00 1970 +0000
458 458 summary: second
459 459
460 460 $ hg heads -q
461 461 3:2e69b451d1ea
462 462
463 463 $ hg status -C
464 464 A b.rename/b
465 465 b/b
466 466 A c.copy
467 467 c
468 468 A foo/foo
469 469 R b/b
470 470 ? a/a.orig
471 471
472 472 there should be no shelves left
473 473
474 474 $ hg shelve -l
475 475
476 476 #if execbit
477 477
478 478 ensure that metadata-only changes are shelved
479 479
480 480 $ chmod +x a/a
481 481 $ hg shelve -q -n execbit a/a
482 482 $ hg status a/a
483 483 $ hg unshelve -q execbit
484 484 $ hg status a/a
485 485 M a/a
486 486 $ hg revert a/a
487 487
488 488 #endif
489 489
490 490 #if symlink
491 491
492 492 $ rm a/a
493 493 $ ln -s foo a/a
494 494 $ hg shelve -q -n symlink a/a
495 495 $ hg status a/a
496 496 $ hg unshelve -q -n symlink
497 497 $ hg status a/a
498 498 M a/a
499 499 $ hg revert a/a
500 500
501 501 #endif
502 502
503 503 set up another conflict between a commit and a shelved change
504 504
505 505 $ hg revert -q -C -a
506 506 $ rm a/a.orig b.rename/b c.copy
507 507 $ echo a >> a/a
508 508 $ hg shelve -q
509 509 $ echo x >> a/a
510 510 $ hg ci -m 'create conflict'
511 511 $ hg add foo/foo
512 512
513 513 if we resolve a conflict while unshelving, the unshelve should succeed
514 514
515 515 $ hg unshelve --tool :merge-other --keep
516 516 unshelving change 'default'
517 517 temporarily committing pending changes (restore with 'hg unshelve --abort')
518 518 rebasing shelved changes
519 519 rebasing 6:2f694dd83a13 "changes to: second" (tip)
520 520 merging a/a
521 521 $ hg parents -q
522 522 4:33f7f61e6c5e
523 523 $ hg shelve -l
524 524 default (*)* changes to: second (glob)
525 525 $ hg status
526 526 M a/a
527 527 A foo/foo
528 528 $ cat a/a
529 529 a
530 530 c
531 531 a
532 532 $ cat > a/a << EOF
533 533 > a
534 534 > c
535 535 > x
536 536 > EOF
537 537
538 538 $ HGMERGE=true hg unshelve
539 539 unshelving change 'default'
540 540 temporarily committing pending changes (restore with 'hg unshelve --abort')
541 541 rebasing shelved changes
542 542 rebasing 6:2f694dd83a13 "changes to: second" (tip)
543 543 merging a/a
544 544 note: rebase of 6:2f694dd83a13 created no changes to commit
545 545 $ hg parents -q
546 546 4:33f7f61e6c5e
547 547 $ hg shelve -l
548 548 $ hg status
549 549 A foo/foo
550 550 $ cat a/a
551 551 a
552 552 c
553 553 x
554 554
555 555 test keep and cleanup
556 556
557 557 $ hg shelve
558 558 shelved as default
559 559 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
560 560 $ hg shelve --list
561 561 default (*)* changes to: create conflict (glob)
562 562 $ hg unshelve -k
563 563 unshelving change 'default'
564 564 $ hg shelve --list
565 565 default (*)* changes to: create conflict (glob)
566 566 $ hg shelve --cleanup
567 567 $ hg shelve --list
568 568
569 569 $ hg shelve --cleanup --delete
570 570 abort: options '--cleanup' and '--delete' may not be used together
571 571 [255]
572 572 $ hg shelve --cleanup --patch
573 573 abort: options '--cleanup' and '--patch' may not be used together
574 574 [255]
575 575 $ hg shelve --cleanup --message MESSAGE
576 576 abort: options '--cleanup' and '--message' may not be used together
577 577 [255]
578 578
579 579 test bookmarks
580 580
581 581 $ hg bookmark test
582 582 $ hg bookmark
583 583 * test 4:33f7f61e6c5e
584 584 $ hg shelve
585 585 shelved as test
586 586 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
587 587 $ hg bookmark
588 588 * test 4:33f7f61e6c5e
589 589 $ hg unshelve
590 590 unshelving change 'test'
591 591 $ hg bookmark
592 592 * test 4:33f7f61e6c5e
593 593
594 594 shelve should still work even if mq is disabled
595 595
596 596 $ hg --config extensions.mq=! shelve
597 597 shelved as test
598 598 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
599 599 $ hg --config extensions.mq=! shelve --list
600 600 test (*)* changes to: create conflict (glob)
601 601 $ hg bookmark
602 602 * test 4:33f7f61e6c5e
603 603 $ hg --config extensions.mq=! unshelve
604 604 unshelving change 'test'
605 605 $ hg bookmark
606 606 * test 4:33f7f61e6c5e
607 607
608 608 shelve should leave dirstate clean (issue4055)
609 609
610 610 $ cd ..
611 611 $ hg init shelverebase
612 612 $ cd shelverebase
613 613 $ printf 'x\ny\n' > x
614 614 $ echo z > z
615 615 $ hg commit -Aqm xy
616 616 $ echo z >> x
617 617 $ hg commit -Aqm z
618 618 $ hg up 0
619 619 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
620 620 $ printf 'a\nx\ny\nz\n' > x
621 621 $ hg commit -Aqm xyz
622 622 $ echo c >> z
623 623 $ hg shelve
624 624 shelved as default
625 625 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
626 626 $ hg rebase -d 1 --config extensions.rebase=
627 627 rebasing 2:323bfa07f744 "xyz" (tip)
628 628 merging x
629 629 saved backup bundle to $TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-78114325-backup.hg (glob)
630 630 $ hg unshelve
631 631 unshelving change 'default'
632 632 rebasing shelved changes
633 633 rebasing 4:82a0d7d6ba61 "changes to: xyz" (tip)
634 634 $ hg status
635 635 M z
636 636
637 637 $ cd ..
638 638
639 639 shelve should only unshelve pending changes (issue4068)
640 640
641 641 $ hg init onlypendingchanges
642 642 $ cd onlypendingchanges
643 643 $ touch a
644 644 $ hg ci -Aqm a
645 645 $ touch b
646 646 $ hg ci -Aqm b
647 647 $ hg up -q 0
648 648 $ touch c
649 649 $ hg ci -Aqm c
650 650
651 651 $ touch d
652 652 $ hg add d
653 653 $ hg shelve
654 654 shelved as default
655 655 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
656 656 $ hg up -q 1
657 657 $ hg unshelve
658 658 unshelving change 'default'
659 659 rebasing shelved changes
660 660 rebasing 3:958bcbd1776e "changes to: c" (tip)
661 661 $ hg status
662 662 A d
663 663
664 664 unshelve should work on an ancestor of the original commit
665 665
666 666 $ hg shelve
667 667 shelved as default
668 668 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
669 669 $ hg up 0
670 670 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
671 671 $ hg unshelve
672 672 unshelving change 'default'
673 673 rebasing shelved changes
674 674 rebasing 3:013284d9655e "changes to: b" (tip)
675 675 $ hg status
676 676 A d
677 677
678 678 test bug 4073 we need to enable obsolete markers for it
679 679
680 680 $ cat >> $HGRCPATH << EOF
681 681 > [experimental]
682 682 > evolution=createmarkers
683 683 > EOF
684 684 $ hg shelve
685 685 shelved as default
686 686 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
687 687 $ hg debugobsolete `hg --debug id -i -r 1`
688 688 $ hg unshelve
689 689 unshelving change 'default'
690 690
691 691 unshelve should leave unknown files alone (issue4113)
692 692
693 693 $ echo e > e
694 694 $ hg shelve
695 695 shelved as default
696 696 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
697 697 $ hg status
698 698 ? e
699 699 $ hg unshelve
700 700 unshelving change 'default'
701 701 $ hg status
702 702 A d
703 703 ? e
704 704 $ cat e
705 705 e
706 706
707 707 unshelve should keep a copy of unknown files
708 708
709 709 $ hg add e
710 710 $ hg shelve
711 711 shelved as default
712 712 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
713 713 $ echo z > e
714 714 $ hg unshelve
715 715 unshelving change 'default'
716 716 $ cat e
717 717 e
718 718 $ cat e.orig
719 719 z
720 720
721 721
722 722 unshelve and conflicts with tracked and untracked files
723 723
724 724 preparing:
725 725
726 726 $ rm *.orig
727 727 $ hg ci -qm 'commit stuff'
728 728 $ hg phase -p null:
729 729
730 730 no other changes - no merge:
731 731
732 732 $ echo f > f
733 733 $ hg add f
734 734 $ hg shelve
735 735 shelved as default
736 736 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
737 737 $ echo g > f
738 738 $ hg unshelve
739 739 unshelving change 'default'
740 740 $ hg st
741 741 A f
742 742 ? f.orig
743 743 $ cat f
744 744 f
745 745 $ cat f.orig
746 746 g
747 747
748 748 other uncommitted changes - merge:
749 749
750 750 $ hg st
751 751 A f
752 752 ? f.orig
753 753 $ hg shelve
754 754 shelved as default
755 755 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
756 756 $ hg log -G --template '{rev} {desc|firstline} {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()'
757 757 o 4 changes to: commit stuff shelve@localhost
758 758 |
759 759 ~
760 760 $ hg log -G --template '{rev} {desc|firstline} {author}'
761 761 @ 3 commit stuff test
762 762 |
763 763 | o 2 c test
764 764 |/
765 765 o 0 a test
766 766
767 767 $ mv f.orig f
768 768 $ echo 1 > a
769 769 $ hg unshelve --date '1073741824 0'
770 770 unshelving change 'default'
771 771 temporarily committing pending changes (restore with 'hg unshelve --abort')
772 772 rebasing shelved changes
773 773 rebasing 5:81152db69da7 "changes to: commit stuff" (tip)
774 774 merging f
775 775 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
776 776 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
777 777 [1]
778 778 $ hg log -G --template '{rev} {desc|firstline} {author} {date|isodate}'
779 779 @ 5 changes to: commit stuff shelve@localhost 1970-01-01 00:00 +0000
780 780 |
781 781 | @ 4 pending changes temporary commit shelve@localhost 2004-01-10 13:37 +0000
782 782 |/
783 783 o 3 commit stuff test 1970-01-01 00:00 +0000
784 784 |
785 785 | o 2 c test 1970-01-01 00:00 +0000
786 786 |/
787 787 o 0 a test 1970-01-01 00:00 +0000
788 788
789 789 $ hg st
790 790 M f
791 791 ? f.orig
792 792 $ cat f
793 793 <<<<<<< dest: 5f6b880e719b - shelve: pending changes temporary commit
794 794 g
795 795 =======
796 796 f
797 797 >>>>>>> source: 81152db69da7 - shelve: changes to: commit stuff
798 798 $ cat f.orig
799 799 g
800 800 $ hg unshelve --abort -t false
801 801 tool option will be ignored
802 802 rebase aborted
803 803 unshelve of 'default' aborted
804 804 $ hg st
805 805 M a
806 806 ? f.orig
807 807 $ cat f.orig
808 808 g
809 809 $ hg unshelve
810 810 unshelving change 'default'
811 811 temporarily committing pending changes (restore with 'hg unshelve --abort')
812 812 rebasing shelved changes
813 813 rebasing 5:81152db69da7 "changes to: commit stuff" (tip)
814 814 $ hg st
815 815 M a
816 816 A f
817 817 ? f.orig
818 818
819 819 other committed changes - merge:
820 820
821 821 $ hg shelve f
822 822 shelved as default
823 823 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
824 824 $ hg ci a -m 'intermediate other change'
825 825 $ mv f.orig f
826 826 $ hg unshelve
827 827 unshelving change 'default'
828 828 rebasing shelved changes
829 829 rebasing 5:81152db69da7 "changes to: commit stuff" (tip)
830 830 merging f
831 831 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
832 832 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
833 833 [1]
834 834 $ hg st
835 835 M f
836 836 ? f.orig
837 837 $ cat f
838 838 <<<<<<< dest: * - test: intermediate other change (glob)
839 839 g
840 840 =======
841 841 f
842 842 >>>>>>> source: 81152db69da7 - shelve: changes to: commit stuff
843 843 $ cat f.orig
844 844 g
845 845 $ hg unshelve --abort
846 846 rebase aborted
847 847 unshelve of 'default' aborted
848 848 $ hg st
849 849 ? f.orig
850 850 $ cat f.orig
851 851 g
852 852 $ hg shelve --delete default
853 853
854 854 Recreate some conflict again
855 855
856 856 $ cd ../repo
857 857 $ hg up -C -r 3
858 858 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
859 859 (leaving bookmark test)
860 860 $ echo y >> a/a
861 861 $ hg shelve
862 862 shelved as default
863 863 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
864 864 $ hg up test
865 865 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
866 866 (activating bookmark test)
867 867 $ hg bookmark
868 868 * test 4:33f7f61e6c5e
869 869 $ hg unshelve
870 870 unshelving change 'default'
871 871 rebasing shelved changes
872 872 rebasing 5:e42a7da90865 "changes to: second" (tip)
873 873 merging a/a
874 874 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
875 875 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
876 876 [1]
877 877 $ hg bookmark
878 878 test 4:33f7f61e6c5e
879 879
880 880 Test that resolving all conflicts in one direction (so that the rebase
881 881 is a no-op), works (issue4398)
882 882
883 883 $ hg revert -a -r .
884 884 reverting a/a (glob)
885 885 $ hg resolve -m a/a
886 886 (no more unresolved files)
887 887 continue: hg unshelve --continue
888 888 $ hg unshelve -c
889 889 rebasing 5:e42a7da90865 "changes to: second" (tip)
890 890 note: rebase of 5:e42a7da90865 created no changes to commit
891 891 unshelve of 'default' complete
892 892 $ hg bookmark
893 893 * test 4:33f7f61e6c5e
894 894 $ hg diff
895 895 $ hg status
896 896 ? a/a.orig
897 897 ? foo/foo
898 898 $ hg summary
899 899 parent: 4:33f7f61e6c5e tip
900 900 create conflict
901 901 branch: default
902 902 bookmarks: *test
903 903 commit: 2 unknown (clean)
904 904 update: (current)
905 905 phases: 5 draft
906 906
907 907 $ hg shelve --delete --stat
908 908 abort: options '--delete' and '--stat' may not be used together
909 909 [255]
910 910 $ hg shelve --delete --name NAME
911 911 abort: options '--delete' and '--name' may not be used together
912 912 [255]
913 913
914 914 Test interactive shelve
915 915 $ cat <<EOF >> $HGRCPATH
916 916 > [ui]
917 917 > interactive = true
918 918 > EOF
919 919 $ echo 'a' >> a/b
920 920 $ cat a/a >> a/b
921 921 $ echo 'x' >> a/b
922 922 $ mv a/b a/a
923 923 $ echo 'a' >> foo/foo
924 924 $ hg st
925 925 M a/a
926 926 ? a/a.orig
927 927 ? foo/foo
928 928 $ cat a/a
929 929 a
930 930 a
931 931 c
932 932 x
933 933 x
934 934 $ cat foo/foo
935 935 foo
936 936 a
937 937 $ hg shelve --interactive --config ui.interactive=false
938 938 abort: running non-interactively
939 939 [255]
940 940 $ hg shelve --interactive << EOF
941 941 > y
942 942 > y
943 943 > n
944 944 > EOF
945 945 diff --git a/a/a b/a/a
946 946 2 hunks, 2 lines changed
947 947 examine changes to 'a/a'? [Ynesfdaq?] y
948 948
949 949 @@ -1,3 +1,4 @@
950 950 +a
951 951 a
952 952 c
953 953 x
954 954 record change 1/2 to 'a/a'? [Ynesfdaq?] y
955 955
956 956 @@ -1,3 +2,4 @@
957 957 a
958 958 c
959 959 x
960 960 +x
961 961 record change 2/2 to 'a/a'? [Ynesfdaq?] n
962 962
963 963 shelved as test
964 964 merging a/a
965 965 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
966 966 $ cat a/a
967 967 a
968 968 c
969 969 x
970 970 x
971 971 $ cat foo/foo
972 972 foo
973 973 a
974 974 $ hg st
975 975 M a/a
976 976 ? foo/foo
977 977 $ hg bookmark
978 978 * test 4:33f7f61e6c5e
979 979 $ hg unshelve
980 980 unshelving change 'test'
981 981 temporarily committing pending changes (restore with 'hg unshelve --abort')
982 982 rebasing shelved changes
983 983 rebasing 6:96a1354f65f6 "changes to: create conflict" (tip)
984 984 merging a/a
985 985 $ hg bookmark
986 986 * test 4:33f7f61e6c5e
987 987 $ cat a/a
988 988 a
989 989 a
990 990 c
991 991 x
992 992 x
993 993
994 994 shelve --patch and shelve --stat should work with valid shelfnames
995 995
996 996 $ hg up --clean .
997 997 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
998 998 (leaving bookmark test)
999 999 $ hg shelve --list
1000 1000 $ echo 'patch a' > shelf-patch-a
1001 1001 $ hg add shelf-patch-a
1002 1002 $ hg shelve
1003 1003 shelved as default
1004 1004 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1005 1005 $ echo 'patch b' > shelf-patch-b
1006 1006 $ hg add shelf-patch-b
1007 1007 $ hg shelve
1008 1008 shelved as default-01
1009 1009 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1010 1010 $ hg shelve --patch default default-01
1011 1011 default-01 (*)* changes to: create conflict (glob)
1012 1012
1013 1013 diff --git a/shelf-patch-b b/shelf-patch-b
1014 1014 new file mode 100644
1015 1015 --- /dev/null
1016 1016 +++ b/shelf-patch-b
1017 1017 @@ -0,0 +1,1 @@
1018 1018 +patch b
1019 1019 default (*)* changes to: create conflict (glob)
1020 1020
1021 1021 diff --git a/shelf-patch-a b/shelf-patch-a
1022 1022 new file mode 100644
1023 1023 --- /dev/null
1024 1024 +++ b/shelf-patch-a
1025 1025 @@ -0,0 +1,1 @@
1026 1026 +patch a
1027 1027 $ hg shelve --stat default default-01
1028 1028 default-01 (*)* changes to: create conflict (glob)
1029 1029 shelf-patch-b | 1 +
1030 1030 1 files changed, 1 insertions(+), 0 deletions(-)
1031 1031 default (*)* changes to: create conflict (glob)
1032 1032 shelf-patch-a | 1 +
1033 1033 1 files changed, 1 insertions(+), 0 deletions(-)
1034 1034 $ hg shelve --patch default
1035 1035 default (*)* changes to: create conflict (glob)
1036 1036
1037 1037 diff --git a/shelf-patch-a b/shelf-patch-a
1038 1038 new file mode 100644
1039 1039 --- /dev/null
1040 1040 +++ b/shelf-patch-a
1041 1041 @@ -0,0 +1,1 @@
1042 1042 +patch a
1043 1043 $ hg shelve --stat default
1044 1044 default (*)* changes to: create conflict (glob)
1045 1045 shelf-patch-a | 1 +
1046 1046 1 files changed, 1 insertions(+), 0 deletions(-)
1047 1047 $ hg shelve --patch nonexistentshelf
1048 1048 abort: cannot find shelf nonexistentshelf
1049 1049 [255]
1050 1050 $ hg shelve --stat nonexistentshelf
1051 1051 abort: cannot find shelf nonexistentshelf
1052 1052 [255]
1053 1053 $ hg shelve --patch default nonexistentshelf
1054 1054 abort: cannot find shelf nonexistentshelf
1055 1055 [255]
1056 1056 $ hg shelve --patch
1057 1057 abort: --patch expects at least one shelf
1058 1058 [255]
1059 1059
1060 1060 $ cd ..
1061 1061
1062 1062 Shelve from general delta repo uses bundle2 on disk
1063 1063 --------------------------------------------------
1064 1064
1065 1065 no general delta
1066 1066
1067 1067 $ hg clone --pull repo bundle1 --config format.usegeneraldelta=0
1068 1068 requesting all changes
1069 1069 adding changesets
1070 1070 adding manifests
1071 1071 adding file changes
1072 1072 added 5 changesets with 8 changes to 6 files
1073 1073 updating to branch default
1074 1074 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1075 1075 $ cd bundle1
1076 1076 $ echo babar > jungle
1077 1077 $ hg add jungle
1078 1078 $ hg shelve
1079 1079 shelved as default
1080 1080 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1081 1081 $ hg debugbundle .hg/shelved/*.hg
1082 1082 45993d65fe9dc3c6d8764b9c3b07fa831ee7d92d
1083 1083 $ cd ..
1084 1084
1085 1085 with general delta
1086 1086
1087 1087 $ hg clone --pull repo bundle2 --config format.usegeneraldelta=1
1088 1088 requesting all changes
1089 1089 adding changesets
1090 1090 adding manifests
1091 1091 adding file changes
1092 1092 added 5 changesets with 8 changes to 6 files
1093 1093 updating to branch default
1094 1094 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1095 1095 $ cd bundle2
1096 1096 $ echo babar > jungle
1097 1097 $ hg add jungle
1098 1098 $ hg shelve
1099 1099 shelved as default
1100 1100 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1101 1101 $ hg debugbundle .hg/shelved/*.hg
1102 1102 Stream params: sortdict([('Compression', 'BZ')])
1103 1103 changegroup -- "sortdict([('version', '02'), ('nbchanges', '1')])"
1104 1104 45993d65fe9dc3c6d8764b9c3b07fa831ee7d92d
1105 1105 $ cd ..
1106 1106
1107 1107 Test visibility of in-memory changes inside transaction to external hook
1108 1108 ------------------------------------------------------------------------
1109 1109
1110 1110 $ cd repo
1111 1111
1112 1112 $ echo xxxx >> x
1113 1113 $ hg commit -m "#5: changes to invoke rebase"
1114 1114
1115 1115 $ cat > $TESTTMP/checkvisibility.sh <<EOF
1116 1116 > echo "==== \$1:"
1117 1117 > hg parents --template "VISIBLE {rev}:{node|short}\n"
1118 1118 > # test that pending changes are hidden
1119 1119 > unset HG_PENDING
1120 1120 > hg parents --template "ACTUAL {rev}:{node|short}\n"
1121 1121 > echo "===="
1122 1122 > EOF
1123 1123
1124 1124 $ cat >> .hg/hgrc <<EOF
1125 1125 > [defaults]
1126 1126 > # to fix hash id of temporary revisions
1127 1127 > unshelve = --date '0 0'
1128 1128 > EOF
1129 1129
1130 1130 "hg unshelve" at REV5 implies steps below:
1131 1131
1132 1132 (1) commit changes in the working directory (REV6)
1133 1133 (2) unbundle shelved revision (REV7)
1134 1134 (3) rebase: merge REV7 into REV6 (REV6 => REV6, REV7)
1135 1135 (4) rebase: commit merged revision (REV8)
1136 1136 (5) rebase: update to REV6 (REV8 => REV6)
1137 1137 (6) update to REV5 (REV6 => REV5)
1138 1138 (7) abort transaction
1139 1139
1140 1140 == test visibility to external preupdate hook
1141 1141
1142 1142 $ cat >> .hg/hgrc <<EOF
1143 1143 > [hooks]
1144 1144 > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate
1145 1145 > EOF
1146 1146
1147 1147 $ echo nnnn >> n
1148 1148
1149 1149 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1150 1150 ==== before-unshelving:
1151 1151 VISIBLE 5:703117a2acfb
1152 1152 ACTUAL 5:703117a2acfb
1153 1153 ====
1154 1154
1155 1155 $ hg unshelve --keep default
1156 1156 temporarily committing pending changes (restore with 'hg unshelve --abort')
1157 1157 rebasing shelved changes
1158 1158 rebasing 7:206bf5d4f922 "changes to: create conflict" (tip)
1159 1159 ==== preupdate:
1160 1160 VISIBLE 6:66b86db80ee4
1161 1161 ACTUAL 5:703117a2acfb
1162 1162 ====
1163 1163 ==== preupdate:
1164 1164 VISIBLE 8:a0e04704317e
1165 1165 ACTUAL 5:703117a2acfb
1166 1166 ====
1167 1167 ==== preupdate:
1168 1168 VISIBLE 6:66b86db80ee4
1169 1169 ACTUAL 5:703117a2acfb
1170 1170 ====
1171 1171
1172 1172 $ cat >> .hg/hgrc <<EOF
1173 1173 > [hooks]
1174 1174 > preupdate.visibility =
1175 1175 > EOF
1176 1176
1177 1177 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1178 1178 ==== after-unshelving:
1179 1179 VISIBLE 5:703117a2acfb
1180 1180 ACTUAL 5:703117a2acfb
1181 1181 ====
1182 1182
1183 1183 == test visibility to external update hook
1184 1184
1185 1185 $ hg update -q -C 5
1186 1186
1187 1187 $ cat >> .hg/hgrc <<EOF
1188 1188 > [hooks]
1189 1189 > update.visibility = sh $TESTTMP/checkvisibility.sh update
1190 1190 > EOF
1191 1191
1192 1192 $ echo nnnn >> n
1193 1193
1194 1194 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1195 1195 ==== before-unshelving:
1196 1196 VISIBLE 5:703117a2acfb
1197 1197 ACTUAL 5:703117a2acfb
1198 1198 ====
1199 1199
1200 1200 $ hg unshelve --keep default
1201 1201 temporarily committing pending changes (restore with 'hg unshelve --abort')
1202 1202 rebasing shelved changes
1203 1203 rebasing 7:206bf5d4f922 "changes to: create conflict" (tip)
1204 1204 ==== update:
1205 1205 VISIBLE 6:66b86db80ee4
1206 1206 VISIBLE 7:206bf5d4f922
1207 1207 ACTUAL 5:703117a2acfb
1208 1208 ====
1209 1209 ==== update:
1210 1210 VISIBLE 6:66b86db80ee4
1211 1211 ACTUAL 5:703117a2acfb
1212 1212 ====
1213 1213 ==== update:
1214 1214 VISIBLE 5:703117a2acfb
1215 1215 ACTUAL 5:703117a2acfb
1216 1216 ====
1217 1217
1218 1218 $ cat >> .hg/hgrc <<EOF
1219 1219 > [hooks]
1220 1220 > update.visibility =
1221 1221 > EOF
1222 1222
1223 1223 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1224 1224 ==== after-unshelving:
1225 1225 VISIBLE 5:703117a2acfb
1226 1226 ACTUAL 5:703117a2acfb
1227 1227 ====
1228 1228
1229 1229 $ cd ..
1230 1230
1231 1231 test .orig files go where the user wants them to
1232 1232 ---------------------------------------------------------------
1233 1233 $ hg init salvage
1234 1234 $ cd salvage
1235 1235 $ echo 'content' > root
1236 1236 $ hg commit -A -m 'root' -q
1237 1237 $ echo '' > root
1238 1238 $ hg shelve -q
1239 1239 $ echo 'contADDent' > root
1240 1240 $ hg unshelve -q --config 'ui.origbackuppath=.hg/origbackups'
1241 1241 warning: conflicts while merging root! (edit, then use 'hg resolve --mark')
1242 1242 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1243 1243 [1]
1244 1244 $ ls .hg/origbackups
1245 1245 root.orig
1246 1246 $ rm -rf .hg/origbackups
1247 1247
1248 1248 test Abort unshelve always gets user out of the unshelved state
1249 1249 ---------------------------------------------------------------
1250 1250 Wreak havoc on the unshelve process
1251 1251 $ rm .hg/unshelverebasestate
1252 1252 $ hg unshelve --abort
1253 1253 unshelve of 'default' aborted
1254 1254 abort: (No such file or directory|The system cannot find the file specified) (re)
1255 1255 [255]
1256 1256 Can the user leave the current state?
1257 1257 $ hg up -C .
1258 1258 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1259 1259
1260 1260 Try again but with a corrupted shelve state file
1261 1261 $ hg strip -r 2 -r 1 -q
1262 1262 $ hg up -r 0 -q
1263 1263 $ echo '' > root
1264 1264 $ hg shelve -q
1265 1265 $ echo 'contADDent' > root
1266 1266 $ hg unshelve -q
1267 1267 warning: conflicts while merging root! (edit, then use 'hg resolve --mark')
1268 1268 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1269 1269 [1]
1270 1270 $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate
1271 1271 $ mv ../corrupt-shelvedstate .hg/histedit-state
1272 1272 $ hg unshelve --abort 2>&1 | grep 'rebase aborted'
1273 1273 rebase aborted
1274 1274 $ hg up -C .
1275 1275 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1276 1276
1277 1277 $ cd ..
1278 1278
1279 1279 Keep active bookmark while (un)shelving even on shared repo (issue4940)
1280 1280 -----------------------------------------------------------------------
1281 1281
1282 1282 $ cat <<EOF >> $HGRCPATH
1283 1283 > [extensions]
1284 1284 > share =
1285 1285 > EOF
1286 1286
1287 1287 $ hg bookmarks -R repo
1288 1288 test 4:33f7f61e6c5e
1289 1289 $ hg share -B repo share
1290 1290 updating working directory
1291 1291 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1292 1292 $ cd share
1293 1293
1294 1294 $ hg bookmarks
1295 1295 test 4:33f7f61e6c5e
1296 1296 $ hg bookmarks foo
1297 1297 $ hg bookmarks
1298 1298 * foo 5:703117a2acfb
1299 1299 test 4:33f7f61e6c5e
1300 1300 $ echo x >> x
1301 1301 $ hg shelve
1302 1302 shelved as foo
1303 1303 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1304 1304 $ hg bookmarks
1305 1305 * foo 5:703117a2acfb
1306 1306 test 4:33f7f61e6c5e
1307 1307
1308 1308 $ hg unshelve
1309 1309 unshelving change 'foo'
1310 1310 $ hg bookmarks
1311 1311 * foo 5:703117a2acfb
1312 1312 test 4:33f7f61e6c5e
1313 1313
1314 1314 $ cd ..
1315 1315
1316 1316 Shelve and unshelve unknown files. For the purposes of unshelve, a shelved
1317 1317 unknown file is the same as a shelved added file, except that it will be in
1318 1318 unknown state after unshelve if and only if it was either absent or unknown
1319 1319 before the unshelve operation.
1320 1320
1321 1321 $ hg init unknowns
1322 1322 $ cd unknowns
1323 1323
1324 1324 The simplest case is if I simply have an unknown file that I shelve and unshelve
1325 1325
1326 1326 $ echo unknown > unknown
1327 1327 $ hg status
1328 1328 ? unknown
1329 1329 $ hg shelve --unknown
1330 1330 shelved as default
1331 1331 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1332 1332 $ hg status
1333 1333 $ hg unshelve
1334 1334 unshelving change 'default'
1335 1335 $ hg status
1336 1336 ? unknown
1337 1337 $ rm unknown
1338 1338
1339 1339 If I shelve, add the file, and unshelve, does it stay added?
1340 1340
1341 1341 $ echo unknown > unknown
1342 1342 $ hg shelve -u
1343 1343 shelved as default
1344 1344 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1345 1345 $ hg status
1346 1346 $ touch unknown
1347 1347 $ hg add unknown
1348 1348 $ hg status
1349 1349 A unknown
1350 1350 $ hg unshelve
1351 1351 unshelving change 'default'
1352 1352 temporarily committing pending changes (restore with 'hg unshelve --abort')
1353 1353 rebasing shelved changes
1354 1354 rebasing 1:098df96e7410 "(changes in empty repository)" (tip)
1355 1355 merging unknown
1356 1356 $ hg status
1357 1357 A unknown
1358 1358 $ hg forget unknown
1359 1359 $ rm unknown
1360 1360
1361 1361 And if I shelve, commit, then unshelve, does it become modified?
1362 1362
1363 1363 $ echo unknown > unknown
1364 1364 $ hg shelve -u
1365 1365 shelved as default
1366 1366 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1367 1367 $ hg status
1368 1368 $ touch unknown
1369 1369 $ hg add unknown
1370 1370 $ hg commit -qm "Add unknown"
1371 1371 $ hg status
1372 1372 $ hg unshelve
1373 1373 unshelving change 'default'
1374 1374 rebasing shelved changes
1375 1375 rebasing 1:098df96e7410 "(changes in empty repository)" (tip)
1376 1376 merging unknown
1377 1377 $ hg status
1378 1378 M unknown
1379 1379 $ hg remove --force unknown
1380 1380 $ hg commit -qm "Remove unknown"
1381 1381
1382 1382 $ cd ..
1383 1383
1384 1384 We expects that non-bare shelve keeps newly created branch in
1385 1385 working directory.
1386 1386
1387 1387 $ hg init shelve-preserve-new-branch
1388 1388 $ cd shelve-preserve-new-branch
1389 1389 $ echo "a" >> a
1390 1390 $ hg add a
1391 1391 $ echo "b" >> b
1392 1392 $ hg add b
1393 1393 $ hg commit -m "ab"
1394 1394 $ echo "aa" >> a
1395 1395 $ echo "bb" >> b
1396 1396 $ hg branch new-branch
1397 1397 marked working directory as branch new-branch
1398 1398 (branches are permanent and global, did you want a bookmark?)
1399 1399 $ hg status
1400 1400 M a
1401 1401 M b
1402 1402 $ hg branch
1403 1403 new-branch
1404 1404 $ hg shelve a
1405 1405 shelved as default
1406 1406 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1407 1407 $ hg branch
1408 1408 new-branch
1409 1409 $ hg status
1410 1410 M b
1411 1411 $ touch "c" >> c
1412 1412 $ hg add c
1413 1413 $ hg status
1414 1414 M b
1415 1415 A c
1416 1416 $ hg shelve --exclude c
1417 1417 shelved as default-01
1418 1418 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1419 1419 $ hg branch
1420 1420 new-branch
1421 1421 $ hg status
1422 1422 A c
1423 1423 $ hg shelve --include c
1424 1424 shelved as default-02
1425 1425 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1426 1426 $ hg branch
1427 1427 new-branch
1428 1428 $ hg status
1429 1429 $ echo "d" >> d
1430 1430 $ hg add d
1431 1431 $ hg status
1432 1432 A d
1433 1433
1434 1434 We expect that bare-shelve will not keep branch in current working directory.
1435 1435
1436 1436 $ hg shelve
1437 1437 shelved as default-03
1438 1438 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1439 1439 $ hg branch
1440 1440 default
1441 1441 $ cd ..
1442 1442
1443 1443 When i shelve commit on newly created branch i expect
1444 1444 that after unshelve newly created branch will be preserved.
1445 1445
1446 1446 $ hg init shelve_on_new_branch_simple
1447 1447 $ cd shelve_on_new_branch_simple
1448 1448 $ echo "aaa" >> a
1449 1449 $ hg commit -A -m "a"
1450 1450 adding a
1451 1451 $ hg branch
1452 1452 default
1453 1453 $ hg branch test
1454 1454 marked working directory as branch test
1455 1455 (branches are permanent and global, did you want a bookmark?)
1456 1456 $ echo "bbb" >> a
1457 1457 $ hg status
1458 1458 M a
1459 1459 $ hg shelve
1460 1460 shelved as default
1461 1461 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1462 1462 $ hg branch
1463 1463 default
1464 1464 $ echo "bbb" >> b
1465 1465 $ hg status
1466 1466 ? b
1467 1467 $ hg unshelve
1468 1468 unshelving change 'default'
1469 1469 marked working directory as branch test
1470 1470 $ hg status
1471 1471 M a
1472 1472 ? b
1473 1473 $ hg branch
1474 1474 test
1475 1475 $ cd ..
1476 1476
1477 1477 When i shelve commit on newly created branch, make
1478 1478 some changes, unshelve it and running into merge
1479 1479 conflicts i expect that after fixing them and
1480 1480 running unshelve --continue newly created branch
1481 1481 will be preserved.
1482 1482
1483 1483 $ hg init shelve_on_new_branch_conflict
1484 1484 $ cd shelve_on_new_branch_conflict
1485 1485 $ echo "aaa" >> a
1486 1486 $ hg commit -A -m "a"
1487 1487 adding a
1488 1488 $ hg branch
1489 1489 default
1490 1490 $ hg branch test
1491 1491 marked working directory as branch test
1492 1492 (branches are permanent and global, did you want a bookmark?)
1493 1493 $ echo "bbb" >> a
1494 1494 $ hg status
1495 1495 M a
1496 1496 $ hg shelve
1497 1497 shelved as default
1498 1498 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1499 1499 $ hg branch
1500 1500 default
1501 1501 $ echo "ccc" >> a
1502 1502 $ hg status
1503 1503 M a
1504 1504 $ hg unshelve
1505 1505 unshelving change 'default'
1506 1506 temporarily committing pending changes (restore with 'hg unshelve --abort')
1507 1507 rebasing shelved changes
1508 1508 rebasing 2:425c97ef07f3 "changes to: a" (tip)
1509 1509 merging a
1510 1510 warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
1511 1511 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1512 1512 [1]
1513 1513 $ echo "aaabbbccc" > a
1514 1514 $ rm a.orig
1515 1515 $ hg resolve --mark a
1516 1516 (no more unresolved files)
1517 1517 continue: hg unshelve --continue
1518 1518 $ hg unshelve --continue
1519 1519 rebasing 2:425c97ef07f3 "changes to: a" (tip)
1520 1520 marked working directory as branch test
1521 1521 unshelve of 'default' complete
1522 1522 $ cat a
1523 1523 aaabbbccc
1524 1524 $ hg status
1525 1525 M a
1526 1526 $ hg branch
1527 1527 test
1528 1528 $ hg commit -m "test-commit"
1529 1529
1530 1530 When i shelve on test branch, update to default branch
1531 1531 and unshelve i expect that it will not preserve previous
1532 1532 test branch.
1533 1533
1534 1534 $ echo "xxx" > b
1535 1535 $ hg add b
1536 1536 $ hg shelve
1537 1537 shelved as test
1538 1538 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1539 1539 $ hg update -r default
1540 1540 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1541 1541 $ hg unshelve
1542 1542 unshelving change 'test'
1543 1543 rebasing shelved changes
1544 1544 rebasing 2:357525f34729 "changes to: test-commit" (tip)
1545 1545 $ hg status
1546 1546 A b
1547 1547 $ hg branch
1548 1548 default
1549 1549 $ cd ..
1550 1550
1551 1551 When i unshelve resulting in merge conflicts and makes saved
1552 1552 file shelvedstate looks like in previous versions in
1553 1553 mercurial(without restore branch information in 7th line) i
1554 1554 expect that after resolving conflicts and successfully
1555 1555 running 'shelve --continue' the branch information won't be
1556 1556 restored and branch will be unchanged.
1557 1557
1558 1558 shelve on new branch, conflict with previous shelvedstate
1559 1559
1560 1560 $ hg init conflict
1561 1561 $ cd conflict
1562 1562 $ echo "aaa" >> a
1563 1563 $ hg commit -A -m "a"
1564 1564 adding a
1565 1565 $ hg branch
1566 1566 default
1567 1567 $ hg branch test
1568 1568 marked working directory as branch test
1569 1569 (branches are permanent and global, did you want a bookmark?)
1570 1570 $ echo "bbb" >> a
1571 1571 $ hg status
1572 1572 M a
1573 1573 $ hg shelve
1574 1574 shelved as default
1575 1575 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1576 1576 $ hg branch
1577 1577 default
1578 1578 $ echo "ccc" >> a
1579 1579 $ hg status
1580 1580 M a
1581 1581 $ hg unshelve
1582 1582 unshelving change 'default'
1583 1583 temporarily committing pending changes (restore with 'hg unshelve --abort')
1584 1584 rebasing shelved changes
1585 1585 rebasing 2:425c97ef07f3 "changes to: a" (tip)
1586 1586 merging a
1587 1587 warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
1588 1588 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1589 1589 [1]
1590 1590
1591 1591 Removing restore branch information from shelvedstate file(making it looks like
1592 1592 in previous versions) and running unshelve --continue
1593 1593
1594 1594 $ head -n 6 < .hg/shelvedstate > .hg/shelvedstate_oldformat
1595 1595 $ rm .hg/shelvedstate
1596 1596 $ mv .hg/shelvedstate_oldformat .hg/shelvedstate
1597 1597
1598 1598 $ echo "aaabbbccc" > a
1599 1599 $ rm a.orig
1600 1600 $ hg resolve --mark a
1601 1601 (no more unresolved files)
1602 1602 continue: hg unshelve --continue
1603 1603 $ hg unshelve --continue
1604 1604 rebasing 2:425c97ef07f3 "changes to: a" (tip)
1605 1605 unshelve of 'default' complete
1606 1606 $ cat a
1607 1607 aaabbbccc
1608 1608 $ hg status
1609 1609 M a
1610 1610 $ hg branch
1611 1611 default
1612 1612 $ cd ..
1613 1613
1614 1614 On non bare shelve the branch information shouldn't be restored
1615 1615
1616 1616 $ hg init bare_shelve_on_new_branch
1617 1617 $ cd bare_shelve_on_new_branch
1618 1618 $ echo "aaa" >> a
1619 1619 $ hg commit -A -m "a"
1620 1620 adding a
1621 1621 $ hg branch
1622 1622 default
1623 1623 $ hg branch test
1624 1624 marked working directory as branch test
1625 1625 (branches are permanent and global, did you want a bookmark?)
1626 1626 $ echo "bbb" >> a
1627 1627 $ hg status
1628 1628 M a
1629 1629 $ hg shelve a
1630 1630 shelved as default
1631 1631 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1632 1632 $ hg branch
1633 1633 test
1634 1634 $ hg branch default
1635 1635 marked working directory as branch default
1636 1636 (branches are permanent and global, did you want a bookmark?)
1637 1637 $ echo "bbb" >> b
1638 1638 $ hg status
1639 1639 ? b
1640 1640 $ hg unshelve
1641 1641 unshelving change 'default'
1642 1642 $ hg status
1643 1643 M a
1644 1644 ? b
1645 1645 $ hg branch
1646 1646 default
1647 1647 $ cd ..
1648 1648
1649 1649 Prepare unshelve with a corrupted shelvedstate
1650 1650 $ hg init r1 && cd r1
1651 1651 $ echo text1 > file && hg add file
1652 1652 $ hg shelve
1653 1653 shelved as default
1654 1654 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1655 1655 $ echo text2 > file && hg ci -Am text1
1656 1656 adding file
1657 1657 $ hg unshelve
1658 1658 unshelving change 'default'
1659 1659 rebasing shelved changes
1660 1660 rebasing 1:396ea74229f9 "(changes in empty repository)" (tip)
1661 1661 merging file
1662 1662 warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
1663 1663 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1664 1664 [1]
1665 1665 $ echo somethingsomething > .hg/shelvedstate
1666 1666
1667 1667 Unshelve --continue fails with appropriate message if shelvedstate is corrupted
1668 1668 $ hg unshelve --continue
1669 1669 abort: corrupted shelved state file
1670 1670 (please run hg unshelve --abort to abort unshelve operation)
1671 1671 [255]
1672 1672
1673 1673 Unshelve --abort works with a corrupted shelvedstate
1674 1674 $ hg unshelve --abort
1675 1675 could not read shelved state file, your working copy may be in an unexpected state
1676 1676 please update to some commit
1677 1677
1678 1678 Unshelve --abort fails with appropriate message if there's no unshelve in
1679 1679 progress
1680 1680 $ hg unshelve --abort
1681 1681 abort: no unshelve in progress
1682 1682 [255]
1683 1683 $ cd ..
1684 1684
1685 1685 Unshelve respects --keep even if user intervention is needed
1686 1686 $ hg init unshelvekeep && cd unshelvekeep
1687 1687 $ echo 1 > file && hg ci -Am 1
1688 1688 adding file
1689 1689 $ echo 2 >> file
1690 1690 $ hg shelve
1691 1691 shelved as default
1692 1692 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1693 1693 $ echo 3 >> file && hg ci -Am 13
1694 1694 $ hg shelve --list
1695 default (1s ago) changes to: 1
1695 default (*s ago) changes to: 1 (glob)
1696 1696 $ hg unshelve --keep
1697 1697 unshelving change 'default'
1698 1698 rebasing shelved changes
1699 1699 rebasing 2:3fbe6fbb0bef "changes to: 1" (tip)
1700 1700 merging file
1701 1701 warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
1702 1702 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1703 1703 [1]
1704 1704 $ hg resolve --mark file
1705 1705 (no more unresolved files)
1706 1706 continue: hg unshelve --continue
1707 1707 $ hg unshelve --continue
1708 1708 rebasing 2:3fbe6fbb0bef "changes to: 1" (tip)
1709 1709 unshelve of 'default' complete
1710 1710 $ hg shelve --list
1711 1711 default (*s ago) changes to: 1 (glob)
1712 1712 $ cd ..
1713 1713
1714 1714 Unshelving when there are deleted files does not crash (issue4176)
1715 1715 $ hg init unshelve-deleted-file && cd unshelve-deleted-file
1716 1716 $ echo a > a && echo b > b && hg ci -Am ab
1717 1717 adding a
1718 1718 adding b
1719 1719 $ echo aa > a && hg shelve
1720 1720 shelved as default
1721 1721 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1722 1722 $ rm b
1723 1723 $ hg st
1724 1724 ! b
1725 1725 $ hg unshelve
1726 1726 unshelving change 'default'
1727 1727 $ hg shelve
1728 1728 shelved as default
1729 1729 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1730 1730 $ rm a && echo b > b
1731 1731 $ hg st
1732 1732 ! a
1733 1733 $ hg unshelve
1734 1734 unshelving change 'default'
1735 1735 abort: shelved change touches missing files
1736 1736 (run hg status to see which files are missing)
1737 1737 [255]
1738 1738 $ hg st
1739 1739 ! a
General Comments 0
You need to be logged in to leave comments. Login now