# HG changeset patch # User Boris Feld # Date 1527524121 -7200 # Node ID 61e4cf1be5b2f71b08236f21fae9cdfd7139aa2e # Parent 8459e8d2f72964026b7e1b5d0eec1d85cdd7edca shelve: directly handle the abort process Shelve is currently sub-contracting some of its work to the rebase extension. In order to make shelve more independent and flexible we would like shelve to handle the parent alignment directly. This change starts with the simplest bits, handling the abort process. It turns out we have all the necessary bits in the `shelvestate` file. So we do not need anything from the interrupted rebase. As a nice side effect, a test about missing `shelverebasestate` state file now behave better. Differential Revision: https://phab.mercurial-scm.org/D3688 diff -r 8459e8d2f729 -r 61e4cf1be5b2 hgext/shelve.py --- a/hgext/shelve.py Mon May 28 20:51:20 2018 +0200 +++ b/hgext/shelve.py Mon May 28 18:15:21 2018 +0200 @@ -621,14 +621,14 @@ try: checkparents(repo, state) - repo.vfs.rename('unshelverebasestate', 'rebasestate') - try: - rebase.rebase(ui, repo, **{ - r'abort' : True - }) - except Exception: - repo.vfs.rename('rebasestate', 'unshelverebasestate') - raise + merge.update(repo, state.pendingctx, False, True) + if (state.activebookmark + and state.activebookmark in repo._bookmarks): + bookmarks.activate(repo, state.activebookmark) + + if repo.vfs.exists('unshelverebasestate'): + repo.vfs.rename('unshelverebasestate', 'rebasestate') + rebase.clearstatus(repo) mergefiles(ui, repo, state.wctx, state.pendingctx) repair.strip(ui, repo, state.nodestoremove, backup=False, diff -r 8459e8d2f729 -r 61e4cf1be5b2 tests/test-shelve.t --- a/tests/test-shelve.t Mon May 28 20:51:20 2018 +0200 +++ b/tests/test-shelve.t Mon May 28 18:15:21 2018 +0200 @@ -406,7 +406,6 @@ R b/b ? a/a.orig $ hg unshelve -a - rebase aborted unshelve of 'default' aborted $ hg heads -q 3:2e69b451d1ea @@ -817,7 +816,6 @@ g $ hg unshelve --abort -t false tool option will be ignored - rebase aborted unshelve of 'default' aborted $ hg st M a @@ -861,7 +859,6 @@ $ cat f.orig g $ hg unshelve --abort - rebase aborted unshelve of 'default' aborted $ hg st ? f.orig @@ -1271,14 +1268,8 @@ $ rm .hg/unshelverebasestate $ hg unshelve --abort unshelve of 'default' aborted - abort: $ENOENT$* (glob) - [255] -Can the user leave the current state? - $ hg up -C . - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Try again but with a corrupted shelve state file - $ hg strip -r 406ad6fb39eb -r e22bdf25c863 -q $ hg up -r 0 -q $ echo '' > root $ hg shelve -q @@ -1290,7 +1281,6 @@ $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate $ mv ../corrupt-shelvedstate .hg/histedit-state $ hg unshelve --abort 2>&1 | grep 'aborted' - rebase aborted unshelve of 'default-01' aborted $ hg summary parent: 0:ae8c668541e8 tip