tests: split test-shelve.t in two
authorMartin von Zweigbergk <martinvonz@google.com>
Wed, 05 Dec 2018 14:46:09 -0800
changeset 40852 1b836cee2d91
parent 40851 74e3df766052
child 40853 d7e44da4dc70
tests: split test-shelve.t in two test-shelve.t dominated run time for all shelve tests. Before: # Ran 9 tests, 1 skipped, 0 failed. real 0m43.568s user 2m15.822s sys 0m40.857s After: # Ran 11 tests, 1 skipped, 0 failed. real 0m24.574s user 2m21.354s sys 0m40.435s Differential Revision: https://phab.mercurial-scm.org/D5388
tests/test-shelve.t
tests/test-shelve2.t
--- a/tests/test-shelve.t	Tue Dec 04 22:16:13 2018 -0800
+++ b/tests/test-shelve.t	Wed Dec 05 14:46:09 2018 -0800
@@ -668,269 +668,8 @@
   $ hg bookmark
    \* test                      (4|13):33f7f61e6c5e (re)
 
-shelve should leave dirstate clean (issue4055)
-
-  $ cd ..
-  $ hg init shelverebase
-  $ cd shelverebase
-  $ printf 'x\ny\n' > x
-  $ echo z > z
-  $ hg commit -Aqm xy
-  $ echo z >> x
-  $ hg commit -Aqm z
-  $ hg up 5c4c67fb7dce
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ printf 'a\nx\ny\nz\n' > x
-  $ hg commit -Aqm xyz
-  $ echo c >> z
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-
-  $ hg rebase -d 6c103be8f4e4 --config extensions.rebase=
-  rebasing 2:323bfa07f744 "xyz"( \(tip\))? (re)
-  merging x
-  saved backup bundle to \$TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-(78114325|7ae538ef)-rebase.hg (re)
-  $ hg unshelve
-  unshelving change 'default'
-  rebasing shelved changes
-  $ hg status
-  M z
-
-  $ cd ..
-
-shelve should only unshelve pending changes (issue4068)
-
-  $ hg init onlypendingchanges
-  $ cd onlypendingchanges
-  $ touch a
-  $ hg ci -Aqm a
-  $ touch b
-  $ hg ci -Aqm b
-  $ hg up -q 3903775176ed
-  $ touch c
-  $ hg ci -Aqm c
-
-  $ touch d
-  $ hg add d
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg up -q 0e067c57feba
-  $ hg unshelve
-  unshelving change 'default'
-  rebasing shelved changes
-  $ hg status
-  A d
-
-unshelve should work on an ancestor of the original commit
-
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg up 3903775176ed
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg unshelve
-  unshelving change 'default'
-  rebasing shelved changes
-  $ hg status
-  A d
-
-test bug 4073 we need to enable obsolete markers for it
-
-  $ cat >> $HGRCPATH << EOF
-  > [experimental]
-  > evolution.createmarkers=True
-  > EOF
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg debugobsolete `hg log -r 0e067c57feba -T '{node}'`
-  obsoleted 1 changesets
-  $ hg unshelve
-  unshelving change 'default'
-
-unshelve should leave unknown files alone (issue4113)
-
-  $ echo e > e
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg status
-  ? e
-  $ hg unshelve
-  unshelving change 'default'
-  $ hg status
-  A d
-  ? e
-  $ cat e
-  e
-
-unshelve should keep a copy of unknown files
-
-  $ hg add e
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
-  $ echo z > e
-  $ hg unshelve
-  unshelving change 'default'
-  $ cat e
-  e
-  $ cat e.orig
-  z
-
-
-unshelve and conflicts with tracked and untracked files
-
- preparing:
-
-  $ rm *.orig
-  $ hg ci -qm 'commit stuff'
-  $ hg phase -p null:
-
- no other changes - no merge:
-
-  $ echo f > f
-  $ hg add f
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ echo g > f
-  $ hg unshelve
-  unshelving change 'default'
-  $ hg st
-  A f
-  ? f.orig
-  $ cat f
-  f
-  $ cat f.orig
-  g
-
- other uncommitted changes - merge:
-
-  $ hg st
-  A f
-  ? f.orig
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-#if repobundlerepo
-  $ hg log -G --template '{rev}  {desc|firstline}  {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()' --hidden
-  o  [48]  changes to: commit stuff  shelve@localhost (re)
-  |
-  ~
-#endif
-  $ hg log -G --template '{rev}  {desc|firstline}  {author}'
-  @  [37]  commit stuff  test (re)
-  |
-  | o  2  c  test
-  |/
-  o  0  a  test
-  
-  $ mv f.orig f
-  $ echo 1 > a
-  $ hg unshelve --date '1073741824 0'
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  merging f
-  warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-
-#if phasebased
-  $ hg log -G --template '{rev}  {desc|firstline}  {author}  {date|isodate}'
-  @  9  pending changes temporary commit  shelve@localhost  2004-01-10 13:37 +0000
-  |
-  | @  8  changes to: commit stuff  shelve@localhost  1970-01-01 00:00 +0000
-  |/
-  o  7  commit stuff  test  1970-01-01 00:00 +0000
-  |
-  | o  2  c  test  1970-01-01 00:00 +0000
-  |/
-  o  0  a  test  1970-01-01 00:00 +0000
-  
-#endif
-
-#if stripbased
-  $ hg log -G --template '{rev}  {desc|firstline}  {author}  {date|isodate}'
-  @  5  changes to: commit stuff  shelve@localhost  1970-01-01 00:00 +0000
-  |
-  | @  4  pending changes temporary commit  shelve@localhost  2004-01-10 13:37 +0000
-  |/
-  o  3  commit stuff  test  1970-01-01 00:00 +0000
-  |
-  | o  2  c  test  1970-01-01 00:00 +0000
-  |/
-  o  0  a  test  1970-01-01 00:00 +0000
-  
-#endif
-
-  $ hg st
-  M f
-  ? f.orig
-  $ cat f
-  <<<<<<< shelve:       d44eae5c3d33 - shelve: pending changes temporary commit
-  g
-  =======
-  f
-  >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff
-  $ cat f.orig
-  g
-  $ hg unshelve --abort -t false
-  tool option will be ignored
-  unshelve of 'default' aborted
-  $ hg st
-  M a
-  ? f.orig
-  $ cat f.orig
-  g
-  $ hg unshelve
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  $ hg st
-  M a
-  A f
-  ? f.orig
-
- other committed changes - merge:
-
-  $ hg shelve f
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg ci a -m 'intermediate other change'
-  $ mv f.orig f
-  $ hg unshelve
-  unshelving change 'default'
-  rebasing shelved changes
-  merging f
-  warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ hg st
-  M f
-  ? f.orig
-  $ cat f
-  <<<<<<< shelve:       6b563750f973 - test: intermediate other change
-  g
-  =======
-  f
-  >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff
-  $ cat f.orig
-  g
-  $ hg unshelve --abort
-  unshelve of 'default' aborted
-  $ hg st
-  ? f.orig
-  $ cat f.orig
-  g
-  $ hg shelve --delete default
-
 Recreate some conflict again
 
-  $ cd ../repo
   $ hg up -C -r 2e69b451d1ea
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (leaving bookmark test)
@@ -1143,21 +882,6 @@
 
   $ cd ..
 
-you shouldn't be able to ask for the patch/stats of the most recent shelve if
-there are no shelves
-
-  $ hg init noshelves
-  $ cd noshelves
-
-  $ hg shelve --patch
-  abort: there are no shelves to show
-  [255]
-  $ hg shelve --stat
-  abort: there are no shelves to show
-  [255]
-
-  $ cd ..
-
 Shelve from general delta repo uses bundle2 on disk
 --------------------------------------------------
 
@@ -1327,43 +1051,6 @@
 
   $ cd ..
 
-test .orig files go where the user wants them to
----------------------------------------------------------------
-  $ hg init salvage
-  $ cd salvage
-  $ echo 'content' > root
-  $ hg commit -A -m 'root' -q
-  $ echo '' > root
-  $ hg shelve -q
-  $ echo 'contADDent' > root
-  $ hg unshelve -q --config 'ui.origbackuppath=.hg/origbackups'
-  warning: conflicts while merging root! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ ls .hg/origbackups
-  root
-  $ rm -rf .hg/origbackups
-
-test Abort unshelve always gets user out of the unshelved state
----------------------------------------------------------------
-
-with a corrupted shelve state file
-  $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate
-  $ mv ../corrupt-shelvedstate .hg/shelvestate
-  $ hg unshelve --abort 2>&1 | grep 'aborted'
-  unshelve of 'default' aborted
-  $ hg summary
-  parent: 0:ae8c668541e8 tip
-   root
-  branch: default
-  commit: 1 modified
-  update: (current)
-  phases: 1 draft
-  $ hg up -C .
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-
-  $ cd ..
-
 Keep active bookmark while (un)shelving even on shared repo (issue4940)
 -----------------------------------------------------------------------
 
@@ -1400,505 +1087,3 @@
      test                      (4|13):33f7f61e6c5e (re)
 
   $ cd ..
-
-Shelve and unshelve unknown files. For the purposes of unshelve, a shelved
-unknown file is the same as a shelved added file, except that it will be in
-unknown state after unshelve if and only if it was either absent or unknown
-before the unshelve operation.
-
-  $ hg init unknowns
-  $ cd unknowns
-
-The simplest case is if I simply have an unknown file that I shelve and unshelve
-
-  $ echo unknown > unknown
-  $ hg status
-  ? unknown
-  $ hg shelve --unknown
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg status
-  $ hg unshelve
-  unshelving change 'default'
-  $ hg status
-  ? unknown
-  $ rm unknown
-
-If I shelve, add the file, and unshelve, does it stay added?
-
-  $ echo unknown > unknown
-  $ hg shelve -u
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg status
-  $ touch unknown
-  $ hg add unknown
-  $ hg status
-  A unknown
-  $ hg unshelve
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  merging unknown
-  $ hg status
-  A unknown
-  $ hg forget unknown
-  $ rm unknown
-
-And if I shelve, commit, then unshelve, does it become modified?
-
-  $ echo unknown > unknown
-  $ hg shelve -u
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg status
-  $ touch unknown
-  $ hg add unknown
-  $ hg commit -qm "Add unknown"
-  $ hg status
-  $ hg unshelve
-  unshelving change 'default'
-  rebasing shelved changes
-  merging unknown
-  $ hg status
-  M unknown
-  $ hg remove --force unknown
-  $ hg commit -qm "Remove unknown"
-
-  $ cd ..
-
-We expects that non-bare shelve keeps newly created branch in
-working directory.
-
-  $ hg init shelve-preserve-new-branch
-  $ cd shelve-preserve-new-branch
-  $ echo "a" >> a
-  $ hg add a
-  $ echo "b" >> b
-  $ hg add b
-  $ hg commit -m "ab"
-  $ echo "aa" >> a
-  $ echo "bb" >> b
-  $ hg branch new-branch
-  marked working directory as branch new-branch
-  (branches are permanent and global, did you want a bookmark?)
-  $ hg status
-  M a
-  M b
-  $ hg branch
-  new-branch
-  $ hg shelve a
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg branch
-  new-branch
-  $ hg status
-  M b
-  $ touch "c" >> c
-  $ hg add c
-  $ hg status
-  M b
-  A c
-  $ hg shelve --exclude c
-  shelved as default-01
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg branch
-  new-branch
-  $ hg status
-  A c
-  $ hg shelve --include c
-  shelved as default-02
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg branch
-  new-branch
-  $ hg status
-  $ echo "d" >> d
-  $ hg add d
-  $ hg status
-  A d
-
-We expect that bare-shelve will not keep branch in current working directory.
-
-  $ hg shelve
-  shelved as default-03
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg branch
-  default
-  $ cd ..
-
-When i shelve commit on newly created branch i expect
-that after unshelve newly created branch will be preserved.
-
-  $ hg init shelve_on_new_branch_simple
-  $ cd shelve_on_new_branch_simple
-  $ echo "aaa" >> a
-  $ hg commit -A -m "a"
-  adding a
-  $ hg branch
-  default
-  $ hg branch test
-  marked working directory as branch test
-  (branches are permanent and global, did you want a bookmark?)
-  $ echo "bbb" >> a
-  $ hg status
-  M a
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg branch
-  default
-  $ echo "bbb" >> b
-  $ hg status
-  ? b
-  $ hg unshelve
-  unshelving change 'default'
-  marked working directory as branch test
-  $ hg status
-  M a
-  ? b
-  $ hg branch
-  test
-  $ cd ..
-
-When i shelve commit on newly created branch, make
-some changes, unshelve it and running into merge
-conflicts i expect that after fixing them and
-running unshelve --continue newly created branch
-will be preserved.
-
-  $ hg init shelve_on_new_branch_conflict
-  $ cd shelve_on_new_branch_conflict
-  $ echo "aaa" >> a
-  $ hg commit -A -m "a"
-  adding a
-  $ hg branch
-  default
-  $ hg branch test
-  marked working directory as branch test
-  (branches are permanent and global, did you want a bookmark?)
-  $ echo "bbb" >> a
-  $ hg status
-  M a
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg branch
-  default
-  $ echo "ccc" >> a
-  $ hg status
-  M a
-  $ hg unshelve
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  merging a
-  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ echo "aaabbbccc" > a
-  $ rm a.orig
-  $ hg resolve --mark a
-  (no more unresolved files)
-  continue: hg unshelve --continue
-  $ hg unshelve --continue
-  marked working directory as branch test
-  unshelve of 'default' complete
-  $ cat a
-  aaabbbccc
-  $ hg status
-  M a
-  $ hg branch
-  test
-  $ hg commit -m "test-commit"
-
-When i shelve on test branch, update to default branch
-and unshelve i expect that it will not preserve previous
-test branch.
-
-  $ echo "xxx" > b
-  $ hg add b
-  $ hg shelve
-  shelved as test
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg update -r 7049e48789d7
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg unshelve
-  unshelving change 'test'
-  rebasing shelved changes
-  $ hg status
-  A b
-  $ hg branch
-  default
-  $ cd ..
-
-When i unshelve resulting in merge conflicts and makes saved
-file shelvedstate looks like in previous versions in
-mercurial(without restore branch information in 7th line) i
-expect that after resolving conflicts and successfully
-running 'shelve --continue' the branch information won't be
-restored and branch will be unchanged.
-
-shelve on new branch, conflict with previous shelvedstate
-
-  $ hg init conflict
-  $ cd conflict
-  $ echo "aaa" >> a
-  $ hg commit -A -m "a"
-  adding a
-  $ hg branch
-  default
-  $ hg branch test
-  marked working directory as branch test
-  (branches are permanent and global, did you want a bookmark?)
-  $ echo "bbb" >> a
-  $ hg status
-  M a
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg branch
-  default
-  $ echo "ccc" >> a
-  $ hg status
-  M a
-  $ hg unshelve
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  merging a
-  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-
-Removing restore branch information from shelvedstate file(making it looks like
-in previous versions) and running unshelve --continue
-
-  $ cp .hg/shelvedstate .hg/shelvedstate_old
-  $ cat .hg/shelvedstate_old | grep -v 'branchtorestore' > .hg/shelvedstate
-
-  $ echo "aaabbbccc" > a
-  $ rm a.orig
-  $ hg resolve --mark a
-  (no more unresolved files)
-  continue: hg unshelve --continue
-  $ hg unshelve --continue
-  unshelve of 'default' complete
-  $ cat a
-  aaabbbccc
-  $ hg status
-  M a
-  $ hg branch
-  default
-  $ cd ..
-
-On non bare shelve the branch information shouldn't be restored
-
-  $ hg init bare_shelve_on_new_branch
-  $ cd bare_shelve_on_new_branch
-  $ echo "aaa" >> a
-  $ hg commit -A -m "a"
-  adding a
-  $ hg branch
-  default
-  $ hg branch test
-  marked working directory as branch test
-  (branches are permanent and global, did you want a bookmark?)
-  $ echo "bbb" >> a
-  $ hg status
-  M a
-  $ hg shelve a
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg branch
-  test
-  $ hg branch default
-  marked working directory as branch default
-  (branches are permanent and global, did you want a bookmark?)
-  $ echo "bbb" >> b
-  $ hg status
-  ? b
-  $ hg unshelve
-  unshelving change 'default'
-  $ hg status
-  M a
-  ? b
-  $ hg branch
-  default
-  $ cd ..
-
-Prepare unshelve with a corrupted shelvedstate
-  $ hg init r1 && cd r1
-  $ echo text1 > file && hg add file
-  $ hg shelve
-  shelved as default
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ echo text2 > file && hg ci -Am text1
-  adding file
-  $ hg unshelve
-  unshelving change 'default'
-  rebasing shelved changes
-  merging file
-  warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ echo somethingsomething > .hg/shelvedstate
-
-Unshelve --continue fails with appropriate message if shelvedstate is corrupted
-  $ hg unshelve --continue
-  abort: corrupted shelved state file
-  (please run hg unshelve --abort to abort unshelve operation)
-  [255]
-
-Unshelve --abort works with a corrupted shelvedstate
-  $ hg unshelve --abort
-  could not read shelved state file, your working copy may be in an unexpected state
-  please update to some commit
-
-Unshelve --abort fails with appropriate message if there's no unshelve in
-progress
-  $ hg unshelve --abort
-  abort: no unshelve in progress
-  [255]
-  $ cd ..
-
-Unshelve respects --keep even if user intervention is needed
-  $ hg init unshelvekeep && cd unshelvekeep
-  $ echo 1 > file && hg ci -Am 1
-  adding file
-  $ echo 2 >> file
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ echo 3 >> file && hg ci -Am 13
-  $ hg shelve --list
-  default         (*s ago) * changes to: 1 (glob)
-  $ hg unshelve --keep
-  unshelving change 'default'
-  rebasing shelved changes
-  merging file
-  warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ hg resolve --mark file
-  (no more unresolved files)
-  continue: hg unshelve --continue
-  $ hg unshelve --continue
-  unshelve of 'default' complete
-  $ hg shelve --list
-  default         (*s ago) * changes to: 1 (glob)
-  $ cd ..
-
-Unshelving when there are deleted files does not crash (issue4176)
-  $ hg init unshelve-deleted-file && cd unshelve-deleted-file
-  $ echo a > a && echo b > b && hg ci -Am ab
-  adding a
-  adding b
-  $ echo aa > a && hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ rm b
-  $ hg st
-  ! b
-  $ hg unshelve
-  unshelving change 'default'
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ rm a && echo b > b
-  $ hg st
-  ! a
-  $ hg unshelve
-  unshelving change 'default'
-  abort: shelved change touches missing files
-  (run hg status to see which files are missing)
-  [255]
-  $ hg st
-  ! a
-  $ cd ..
-
-New versions of Mercurial know how to read onld shelvedstate files
-  $ hg init oldshelvedstate
-  $ cd oldshelvedstate
-  $ echo root > root && hg ci -Am root
-  adding root
-  $ echo 1 > a
-  $ hg add a
-  $ hg shelve --name ashelve
-  shelved as ashelve
-  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ echo 2 > a
-  $ hg ci -Am a
-  adding a
-  $ hg unshelve
-  unshelving change 'ashelve'
-  rebasing shelved changes
-  merging a
-  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-putting v1 shelvedstate file in place of a created v2
-  $ cat << EOF > .hg/shelvedstate
-  > 1
-  > ashelve
-  > 8b058dae057a5a78f393f4535d9e363dd5efac9d
-  > 8b058dae057a5a78f393f4535d9e363dd5efac9d
-  > 8b058dae057a5a78f393f4535d9e363dd5efac9d f543b27db2cdb41737e2e0008dc524c471da1446
-  > f543b27db2cdb41737e2e0008dc524c471da1446
-  > 
-  > nokeep
-  > :no-active-bookmark
-  > EOF
-  $ echo 1 > a
-  $ hg resolve --mark a
-  (no more unresolved files)
-  continue: hg unshelve --continue
-mercurial does not crash
-  $ hg unshelve --continue
-  unshelve of 'ashelve' complete
-
-#if phasebased
-
-Unshelve with some metadata file missing
-----------------------------------------
-
-  $ hg shelve
-  shelved as default
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ echo 3 > a
-
-Test with the `.shelve` missing, but the changeset still in the repo (non-natural case)
-
-  $ rm .hg/shelved/default.shelve
-  $ hg unshelve
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  merging a
-  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ hg unshelve --abort
-  unshelve of 'default' aborted
-
-Unshelve without .shelve metadata (can happen when upgrading a repository with old shelve)
-
-  $ cat .hg/shelved/default.shelve
-  node=82e0cb9893247d12667017593ce1e5655860f1ac
-  $ hg strip --hidden --rev 82e0cb989324 --no-backup
-  $ rm .hg/shelved/default.shelve
-  $ hg unshelve
-  unshelving change 'default'
-  temporarily committing pending changes (restore with 'hg unshelve --abort')
-  rebasing shelved changes
-  merging a
-  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
-  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
-  [1]
-  $ cat .hg/shelved/default.shelve
-  node=82e0cb9893247d12667017593ce1e5655860f1ac
-  $ hg unshelve --abort
-  unshelve of 'default' aborted
-
-#endif
-
-  $ cd ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-shelve2.t	Wed Dec 05 14:46:09 2018 -0800
@@ -0,0 +1,835 @@
+#testcases stripbased phasebased
+
+  $ cat <<EOF >> $HGRCPATH
+  > [extensions]
+  > mq =
+  > shelve =
+  > [defaults]
+  > diff = --nodates --git
+  > qnew = --date '0 0'
+  > [shelve]
+  > maxbackups = 2
+  > EOF
+
+#if phasebased
+
+  $ cat <<EOF >> $HGRCPATH
+  > [format]
+  > internal-phase = yes
+  > EOF
+
+#endif
+
+shelve should leave dirstate clean (issue4055)
+
+  $ hg init shelverebase
+  $ cd shelverebase
+  $ printf 'x\ny\n' > x
+  $ echo z > z
+  $ hg commit -Aqm xy
+  $ echo z >> x
+  $ hg commit -Aqm z
+  $ hg up 5c4c67fb7dce
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ printf 'a\nx\ny\nz\n' > x
+  $ hg commit -Aqm xyz
+  $ echo c >> z
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ hg rebase -d 6c103be8f4e4 --config extensions.rebase=
+  rebasing 2:323bfa07f744 "xyz"( \(tip\))? (re)
+  merging x
+  saved backup bundle to \$TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-(78114325|7ae538ef)-rebase.hg (re)
+  $ hg unshelve
+  unshelving change 'default'
+  rebasing shelved changes
+  $ hg status
+  M z
+
+  $ cd ..
+
+shelve should only unshelve pending changes (issue4068)
+
+  $ hg init onlypendingchanges
+  $ cd onlypendingchanges
+  $ touch a
+  $ hg ci -Aqm a
+  $ touch b
+  $ hg ci -Aqm b
+  $ hg up -q 3903775176ed
+  $ touch c
+  $ hg ci -Aqm c
+
+  $ touch d
+  $ hg add d
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg up -q 0e067c57feba
+  $ hg unshelve
+  unshelving change 'default'
+  rebasing shelved changes
+  $ hg status
+  A d
+
+unshelve should work on an ancestor of the original commit
+
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg up 3903775176ed
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg unshelve
+  unshelving change 'default'
+  rebasing shelved changes
+  $ hg status
+  A d
+
+test bug 4073 we need to enable obsolete markers for it
+
+  $ cat >> $HGRCPATH << EOF
+  > [experimental]
+  > evolution.createmarkers=True
+  > EOF
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg debugobsolete `hg log -r 0e067c57feba -T '{node}'`
+  obsoleted 1 changesets
+  $ hg unshelve
+  unshelving change 'default'
+
+unshelve should leave unknown files alone (issue4113)
+
+  $ echo e > e
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg status
+  ? e
+  $ hg unshelve
+  unshelving change 'default'
+  $ hg status
+  A d
+  ? e
+  $ cat e
+  e
+
+unshelve should keep a copy of unknown files
+
+  $ hg add e
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ echo z > e
+  $ hg unshelve
+  unshelving change 'default'
+  $ cat e
+  e
+  $ cat e.orig
+  z
+
+
+unshelve and conflicts with tracked and untracked files
+
+ preparing:
+
+  $ rm *.orig
+  $ hg ci -qm 'commit stuff'
+  $ hg phase -p null:
+
+ no other changes - no merge:
+
+  $ echo f > f
+  $ hg add f
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo g > f
+  $ hg unshelve
+  unshelving change 'default'
+  $ hg st
+  A f
+  ? f.orig
+  $ cat f
+  f
+  $ cat f.orig
+  g
+
+ other uncommitted changes - merge:
+
+  $ hg st
+  A f
+  ? f.orig
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+#if repobundlerepo
+  $ hg log -G --template '{rev}  {desc|firstline}  {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()' --hidden
+  o  [48]  changes to: commit stuff  shelve@localhost (re)
+  |
+  ~
+#endif
+  $ hg log -G --template '{rev}  {desc|firstline}  {author}'
+  @  [37]  commit stuff  test (re)
+  |
+  | o  2  c  test
+  |/
+  o  0  a  test
+  
+  $ mv f.orig f
+  $ echo 1 > a
+  $ hg unshelve --date '1073741824 0'
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  merging f
+  warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+
+#if phasebased
+  $ hg log -G --template '{rev}  {desc|firstline}  {author}  {date|isodate}'
+  @  9  pending changes temporary commit  shelve@localhost  2004-01-10 13:37 +0000
+  |
+  | @  8  changes to: commit stuff  shelve@localhost  1970-01-01 00:00 +0000
+  |/
+  o  7  commit stuff  test  1970-01-01 00:00 +0000
+  |
+  | o  2  c  test  1970-01-01 00:00 +0000
+  |/
+  o  0  a  test  1970-01-01 00:00 +0000
+  
+#endif
+
+#if stripbased
+  $ hg log -G --template '{rev}  {desc|firstline}  {author}  {date|isodate}'
+  @  5  changes to: commit stuff  shelve@localhost  1970-01-01 00:00 +0000
+  |
+  | @  4  pending changes temporary commit  shelve@localhost  2004-01-10 13:37 +0000
+  |/
+  o  3  commit stuff  test  1970-01-01 00:00 +0000
+  |
+  | o  2  c  test  1970-01-01 00:00 +0000
+  |/
+  o  0  a  test  1970-01-01 00:00 +0000
+  
+#endif
+
+  $ hg st
+  M f
+  ? f.orig
+  $ cat f
+  <<<<<<< shelve:       d44eae5c3d33 - shelve: pending changes temporary commit
+  g
+  =======
+  f
+  >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff
+  $ cat f.orig
+  g
+  $ hg unshelve --abort -t false
+  tool option will be ignored
+  unshelve of 'default' aborted
+  $ hg st
+  M a
+  ? f.orig
+  $ cat f.orig
+  g
+  $ hg unshelve
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  $ hg st
+  M a
+  A f
+  ? f.orig
+
+ other committed changes - merge:
+
+  $ hg shelve f
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg ci a -m 'intermediate other change'
+  $ mv f.orig f
+  $ hg unshelve
+  unshelving change 'default'
+  rebasing shelved changes
+  merging f
+  warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ hg st
+  M f
+  ? f.orig
+  $ cat f
+  <<<<<<< shelve:       6b563750f973 - test: intermediate other change
+  g
+  =======
+  f
+  >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff
+  $ cat f.orig
+  g
+  $ hg unshelve --abort
+  unshelve of 'default' aborted
+  $ hg st
+  ? f.orig
+  $ cat f.orig
+  g
+  $ hg shelve --delete default
+  $ cd ..
+
+you shouldn't be able to ask for the patch/stats of the most recent shelve if
+there are no shelves
+
+  $ hg init noshelves
+  $ cd noshelves
+
+  $ hg shelve --patch
+  abort: there are no shelves to show
+  [255]
+  $ hg shelve --stat
+  abort: there are no shelves to show
+  [255]
+
+  $ cd ..
+
+test .orig files go where the user wants them to
+---------------------------------------------------------------
+  $ hg init salvage
+  $ cd salvage
+  $ echo 'content' > root
+  $ hg commit -A -m 'root' -q
+  $ echo '' > root
+  $ hg shelve -q
+  $ echo 'contADDent' > root
+  $ hg unshelve -q --config 'ui.origbackuppath=.hg/origbackups'
+  warning: conflicts while merging root! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ ls .hg/origbackups
+  root
+  $ rm -rf .hg/origbackups
+
+test Abort unshelve always gets user out of the unshelved state
+---------------------------------------------------------------
+
+with a corrupted shelve state file
+  $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate
+  $ mv ../corrupt-shelvedstate .hg/shelvestate
+  $ hg unshelve --abort 2>&1 | grep 'aborted'
+  unshelve of 'default' aborted
+  $ hg summary
+  parent: 0:ae8c668541e8 tip
+   root
+  branch: default
+  commit: 1 modified
+  update: (current)
+  phases: 1 draft
+  $ hg up -C .
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ cd ..
+
+Shelve and unshelve unknown files. For the purposes of unshelve, a shelved
+unknown file is the same as a shelved added file, except that it will be in
+unknown state after unshelve if and only if it was either absent or unknown
+before the unshelve operation.
+
+  $ hg init unknowns
+  $ cd unknowns
+
+The simplest case is if I simply have an unknown file that I shelve and unshelve
+
+  $ echo unknown > unknown
+  $ hg status
+  ? unknown
+  $ hg shelve --unknown
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg status
+  $ hg unshelve
+  unshelving change 'default'
+  $ hg status
+  ? unknown
+  $ rm unknown
+
+If I shelve, add the file, and unshelve, does it stay added?
+
+  $ echo unknown > unknown
+  $ hg shelve -u
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg status
+  $ touch unknown
+  $ hg add unknown
+  $ hg status
+  A unknown
+  $ hg unshelve
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  merging unknown
+  $ hg status
+  A unknown
+  $ hg forget unknown
+  $ rm unknown
+
+And if I shelve, commit, then unshelve, does it become modified?
+
+  $ echo unknown > unknown
+  $ hg shelve -u
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg status
+  $ touch unknown
+  $ hg add unknown
+  $ hg commit -qm "Add unknown"
+  $ hg status
+  $ hg unshelve
+  unshelving change 'default'
+  rebasing shelved changes
+  merging unknown
+  $ hg status
+  M unknown
+  $ hg remove --force unknown
+  $ hg commit -qm "Remove unknown"
+
+  $ cd ..
+
+We expects that non-bare shelve keeps newly created branch in
+working directory.
+
+  $ hg init shelve-preserve-new-branch
+  $ cd shelve-preserve-new-branch
+  $ echo "a" >> a
+  $ hg add a
+  $ echo "b" >> b
+  $ hg add b
+  $ hg commit -m "ab"
+  $ echo "aa" >> a
+  $ echo "bb" >> b
+  $ hg branch new-branch
+  marked working directory as branch new-branch
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg status
+  M a
+  M b
+  $ hg branch
+  new-branch
+  $ hg shelve a
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg branch
+  new-branch
+  $ hg status
+  M b
+  $ touch "c" >> c
+  $ hg add c
+  $ hg status
+  M b
+  A c
+  $ hg shelve --exclude c
+  shelved as default-01
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg branch
+  new-branch
+  $ hg status
+  A c
+  $ hg shelve --include c
+  shelved as default-02
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg branch
+  new-branch
+  $ hg status
+  $ echo "d" >> d
+  $ hg add d
+  $ hg status
+  A d
+
+We expect that bare-shelve will not keep branch in current working directory.
+
+  $ hg shelve
+  shelved as default-03
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg branch
+  default
+  $ cd ..
+
+When i shelve commit on newly created branch i expect
+that after unshelve newly created branch will be preserved.
+
+  $ hg init shelve_on_new_branch_simple
+  $ cd shelve_on_new_branch_simple
+  $ echo "aaa" >> a
+  $ hg commit -A -m "a"
+  adding a
+  $ hg branch
+  default
+  $ hg branch test
+  marked working directory as branch test
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo "bbb" >> a
+  $ hg status
+  M a
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg branch
+  default
+  $ echo "bbb" >> b
+  $ hg status
+  ? b
+  $ hg unshelve
+  unshelving change 'default'
+  marked working directory as branch test
+  $ hg status
+  M a
+  ? b
+  $ hg branch
+  test
+  $ cd ..
+
+When i shelve commit on newly created branch, make
+some changes, unshelve it and running into merge
+conflicts i expect that after fixing them and
+running unshelve --continue newly created branch
+will be preserved.
+
+  $ hg init shelve_on_new_branch_conflict
+  $ cd shelve_on_new_branch_conflict
+  $ echo "aaa" >> a
+  $ hg commit -A -m "a"
+  adding a
+  $ hg branch
+  default
+  $ hg branch test
+  marked working directory as branch test
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo "bbb" >> a
+  $ hg status
+  M a
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg branch
+  default
+  $ echo "ccc" >> a
+  $ hg status
+  M a
+  $ hg unshelve
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ echo "aaabbbccc" > a
+  $ rm a.orig
+  $ hg resolve --mark a
+  (no more unresolved files)
+  continue: hg unshelve --continue
+  $ hg unshelve --continue
+  marked working directory as branch test
+  unshelve of 'default' complete
+  $ cat a
+  aaabbbccc
+  $ hg status
+  M a
+  $ hg branch
+  test
+  $ hg commit -m "test-commit"
+
+When i shelve on test branch, update to default branch
+and unshelve i expect that it will not preserve previous
+test branch.
+
+  $ echo "xxx" > b
+  $ hg add b
+  $ hg shelve
+  shelved as test
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg update -r 7049e48789d7
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg unshelve
+  unshelving change 'test'
+  rebasing shelved changes
+  $ hg status
+  A b
+  $ hg branch
+  default
+  $ cd ..
+
+When i unshelve resulting in merge conflicts and makes saved
+file shelvedstate looks like in previous versions in
+mercurial(without restore branch information in 7th line) i
+expect that after resolving conflicts and successfully
+running 'shelve --continue' the branch information won't be
+restored and branch will be unchanged.
+
+shelve on new branch, conflict with previous shelvedstate
+
+  $ hg init conflict
+  $ cd conflict
+  $ echo "aaa" >> a
+  $ hg commit -A -m "a"
+  adding a
+  $ hg branch
+  default
+  $ hg branch test
+  marked working directory as branch test
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo "bbb" >> a
+  $ hg status
+  M a
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg branch
+  default
+  $ echo "ccc" >> a
+  $ hg status
+  M a
+  $ hg unshelve
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+
+Removing restore branch information from shelvedstate file(making it looks like
+in previous versions) and running unshelve --continue
+
+  $ cp .hg/shelvedstate .hg/shelvedstate_old
+  $ cat .hg/shelvedstate_old | grep -v 'branchtorestore' > .hg/shelvedstate
+
+  $ echo "aaabbbccc" > a
+  $ rm a.orig
+  $ hg resolve --mark a
+  (no more unresolved files)
+  continue: hg unshelve --continue
+  $ hg unshelve --continue
+  unshelve of 'default' complete
+  $ cat a
+  aaabbbccc
+  $ hg status
+  M a
+  $ hg branch
+  default
+  $ cd ..
+
+On non bare shelve the branch information shouldn't be restored
+
+  $ hg init bare_shelve_on_new_branch
+  $ cd bare_shelve_on_new_branch
+  $ echo "aaa" >> a
+  $ hg commit -A -m "a"
+  adding a
+  $ hg branch
+  default
+  $ hg branch test
+  marked working directory as branch test
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo "bbb" >> a
+  $ hg status
+  M a
+  $ hg shelve a
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg branch
+  test
+  $ hg branch default
+  marked working directory as branch default
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo "bbb" >> b
+  $ hg status
+  ? b
+  $ hg unshelve
+  unshelving change 'default'
+  $ hg status
+  M a
+  ? b
+  $ hg branch
+  default
+  $ cd ..
+
+Prepare unshelve with a corrupted shelvedstate
+  $ hg init r1 && cd r1
+  $ echo text1 > file && hg add file
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo text2 > file && hg ci -Am text1
+  adding file
+  $ hg unshelve
+  unshelving change 'default'
+  rebasing shelved changes
+  merging file
+  warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ echo somethingsomething > .hg/shelvedstate
+
+Unshelve --continue fails with appropriate message if shelvedstate is corrupted
+  $ hg unshelve --continue
+  abort: corrupted shelved state file
+  (please run hg unshelve --abort to abort unshelve operation)
+  [255]
+
+Unshelve --abort works with a corrupted shelvedstate
+  $ hg unshelve --abort
+  could not read shelved state file, your working copy may be in an unexpected state
+  please update to some commit
+
+Unshelve --abort fails with appropriate message if there's no unshelve in
+progress
+  $ hg unshelve --abort
+  abort: no unshelve in progress
+  [255]
+  $ cd ..
+
+Unshelve respects --keep even if user intervention is needed
+  $ hg init unshelvekeep && cd unshelvekeep
+  $ echo 1 > file && hg ci -Am 1
+  adding file
+  $ echo 2 >> file
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo 3 >> file && hg ci -Am 13
+  $ hg shelve --list
+  default         (*s ago) * changes to: 1 (glob)
+  $ hg unshelve --keep
+  unshelving change 'default'
+  rebasing shelved changes
+  merging file
+  warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ hg resolve --mark file
+  (no more unresolved files)
+  continue: hg unshelve --continue
+  $ hg unshelve --continue
+  unshelve of 'default' complete
+  $ hg shelve --list
+  default         (*s ago) * changes to: 1 (glob)
+  $ cd ..
+
+Unshelving when there are deleted files does not crash (issue4176)
+  $ hg init unshelve-deleted-file && cd unshelve-deleted-file
+  $ echo a > a && echo b > b && hg ci -Am ab
+  adding a
+  adding b
+  $ echo aa > a && hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ rm b
+  $ hg st
+  ! b
+  $ hg unshelve
+  unshelving change 'default'
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ rm a && echo b > b
+  $ hg st
+  ! a
+  $ hg unshelve
+  unshelving change 'default'
+  abort: shelved change touches missing files
+  (run hg status to see which files are missing)
+  [255]
+  $ hg st
+  ! a
+  $ cd ..
+
+New versions of Mercurial know how to read onld shelvedstate files
+  $ hg init oldshelvedstate
+  $ cd oldshelvedstate
+  $ echo root > root && hg ci -Am root
+  adding root
+  $ echo 1 > a
+  $ hg add a
+  $ hg shelve --name ashelve
+  shelved as ashelve
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo 2 > a
+  $ hg ci -Am a
+  adding a
+  $ hg unshelve
+  unshelving change 'ashelve'
+  rebasing shelved changes
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+putting v1 shelvedstate file in place of a created v2
+  $ cat << EOF > .hg/shelvedstate
+  > 1
+  > ashelve
+  > 8b058dae057a5a78f393f4535d9e363dd5efac9d
+  > 8b058dae057a5a78f393f4535d9e363dd5efac9d
+  > 8b058dae057a5a78f393f4535d9e363dd5efac9d f543b27db2cdb41737e2e0008dc524c471da1446
+  > f543b27db2cdb41737e2e0008dc524c471da1446
+  > 
+  > nokeep
+  > :no-active-bookmark
+  > EOF
+  $ echo 1 > a
+  $ hg resolve --mark a
+  (no more unresolved files)
+  continue: hg unshelve --continue
+mercurial does not crash
+  $ hg unshelve --continue
+  unshelve of 'ashelve' complete
+
+#if phasebased
+
+Unshelve with some metadata file missing
+----------------------------------------
+
+  $ hg shelve
+  shelved as default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo 3 > a
+
+Test with the `.shelve` missing, but the changeset still in the repo (non-natural case)
+
+  $ rm .hg/shelved/default.shelve
+  $ hg unshelve
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ hg unshelve --abort
+  unshelve of 'default' aborted
+
+Unshelve without .shelve metadata (can happen when upgrading a repository with old shelve)
+
+  $ cat .hg/shelved/default.shelve
+  node=82e0cb9893247d12667017593ce1e5655860f1ac
+  $ hg strip --hidden --rev 82e0cb989324 --no-backup
+  $ rm .hg/shelved/default.shelve
+  $ hg unshelve
+  unshelving change 'default'
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
+  [1]
+  $ cat .hg/shelved/default.shelve
+  node=82e0cb9893247d12667017593ce1e5655860f1ac
+  $ hg unshelve --abort
+  unshelve of 'default' aborted
+
+#endif
+
+  $ cd ..