D6607: merge: disallow merge abort in case of an unfinished operation(issue6160)
taapas1128 (Taapas Agrawal)
phabricator at mercurial-scm.org
Tue Jul 9 06:01:09 EDT 2019
Closed by commit rHGb8d54f4625cb: merge: disallow merge abort in case of an unfinished operation (issue6160) (authored by taapas1128).
This revision was automatically updated to reflect the committed changes.
CHANGED PRIOR TO COMMIT
https://phab.mercurial-scm.org/D6607?vs=15814&id=15829#toc
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6607?vs=15814&id=15829
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D6607/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D6607
AFFECTED FILES
mercurial/cmdutil.py
mercurial/commands.py
relnotes/next
tests/test-shelve2.t
CHANGE DETAILS
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 at 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 ..
diff --git a/relnotes/next b/relnotes/next
--- a/relnotes/next
+++ b/relnotes/next
@@ -81,6 +81,10 @@
* `cmdutil.checkunfinished()` now includes detection for merge too.
+ * merge abort has been disallowed in case an operation of higher
+ precedence is in progress to avoid cases of partial abort of
+ operations.
+
* We used to automatically attempt to make extensions compatible with
Python 3 (by translating their source code while loading it). We no
longer do that.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -3952,6 +3952,10 @@
if abort and repo.dirstate.p2() == nullid:
cmdutil.wrongtooltocontinue(repo, _('merge'))
if abort:
+ state = cmdutil.getunfinishedstate(repo)
+ if state 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/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3297,6 +3297,14 @@
if s._clearable and s.isunfinished(repo):
util.unlink(repo.vfs.join(s._fname))
+def getunfinishedstate(repo):
+ ''' Checks for unfinished operations and returns statecheck object
+ for it'''
+ for state in statemod._unfinishedstates:
+ if state.isunfinished(repo):
+ return state
+ return None
+
def howtocontinue(repo):
'''Check for an unfinished operation and return the command to finish
it.
To: taapas1128, #hg-reviewers, pulkit
Cc: pulkit, mercurial-devel
More information about the Mercurial-devel
mailing list