diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -4016,6 +4016,10 @@ if abort and repo.dirstate.p2() == nullid: cmdutil.wrongtooltocontinue(repo, _('merge')) if abort: + for state in statemod._unfinishedstates: + if state.isunfinished(repo) and state._opname != 'merge': + raise error.Abort(_('cannot abort merge with %s in progress') % + (state._opname), hint=state.hint()) if node: raise error.Abort(_("cannot specify a node with --abort")) if opts.get('rev'): diff --git a/tests/test-shelve2.t b/tests/test-shelve2.t --- a/tests/test-shelve2.t +++ b/tests/test-shelve2.t @@ -847,3 +847,38 @@ #endif $ cd .. + +Block merge abort when unshelve in progress(issue6160) +------------------------------------------------------ + + $ hg init a + $ cd a + $ echo foo > a ; hg commit -qAm "initial commit" + $ echo bar > a + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo foobar > 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] + + $ hg log --template '{desc|firstline} {author} {date|isodate} \n' -r . + pending changes temporary commit shelve@localhost 1970-01-01 00:00 +0000 + $ hg merge --abort + abort: cannot abort merge with unshelve in progress + (use 'hg unshelve --continue' or 'hg unshelve --abort') + [255] + + $ hg unshelve --abort + unshelve of 'default' aborted + + $ hg log -G --template '{desc|firstline} {author} {date|isodate} \n' -r . + @ initial commit test 1970-01-01 00:00 +0000 + + $ cd ..