--- a/mercurial/commands.py Thu Jun 20 14:33:42 2019 -0400
+++ b/mercurial/commands.py Sat Jul 06 22:19:36 2019 +0530
@@ -53,7 +53,6 @@
pycompat,
rcutil,
registrar,
- repair,
revsetlang,
rewriteutil,
scmutil,
@@ -2465,14 +2464,14 @@
opts.get('currentuser'), opts.get('rev'))):
raise error.Abort(_("cannot specify any other flag with '--abort'"))
- return _abortgraft(ui, repo, graftstate)
+ return cmdutil.abortgraft(ui, repo, graftstate)
elif opts.get('continue'):
cont = True
if revs:
raise error.Abort(_("can't specify --continue and revisions"))
# read in unfinished revisions
if graftstate.exists():
- statedata = _readgraftstate(repo, graftstate)
+ statedata = cmdutil.readgraftstate(repo, graftstate)
if statedata.get('date'):
opts['date'] = statedata['date']
if statedata.get('user'):
@@ -2642,69 +2641,6 @@
return 0
-def _abortgraft(ui, repo, graftstate):
- """abort the interrupted graft and rollbacks to the state before interrupted
- graft"""
- if not graftstate.exists():
- raise error.Abort(_("no interrupted graft to abort"))
- statedata = _readgraftstate(repo, graftstate)
- newnodes = statedata.get('newnodes')
- if newnodes is None:
- # and old graft state which does not have all the data required to abort
- # the graft
- raise error.Abort(_("cannot abort using an old graftstate"))
-
- # changeset from which graft operation was started
- if len(newnodes) > 0:
- startctx = repo[newnodes[0]].p1()
- else:
- startctx = repo['.']
- # whether to strip or not
- cleanup = False
- if newnodes:
- newnodes = [repo[r].rev() for r in newnodes]
- cleanup = True
- # checking that none of the newnodes turned public or is public
- immutable = [c for c in newnodes if not repo[c].mutable()]
- if immutable:
- repo.ui.warn(_("cannot clean up public changesets %s\n")
- % ', '.join(bytes(repo[r]) for r in immutable),
- hint=_("see 'hg help phases' for details"))
- cleanup = False
-
- # checking that no new nodes are created on top of grafted revs
- desc = set(repo.changelog.descendants(newnodes))
- if desc - set(newnodes):
- repo.ui.warn(_("new changesets detected on destination "
- "branch, can't strip\n"))
- cleanup = False
-
- if cleanup:
- with repo.wlock(), repo.lock():
- hg.updaterepo(repo, startctx.node(), overwrite=True)
- # stripping the new nodes created
- strippoints = [c.node() for c in repo.set("roots(%ld)",
- newnodes)]
- repair.strip(repo.ui, repo, strippoints, backup=False)
-
- if not cleanup:
- # we don't update to the startnode if we can't strip
- startctx = repo['.']
- hg.updaterepo(repo, startctx.node(), overwrite=True)
-
- ui.status(_("graft aborted\n"))
- ui.status(_("working directory is now at %s\n") % startctx.hex()[:12])
- graftstate.delete()
- return 0
-
-def _readgraftstate(repo, graftstate):
- """read the graft state file and return a dict of the data stored in it"""
- try:
- return graftstate.read()
- except error.CorruptedState:
- nodes = repo.vfs.read('graftstate').splitlines()
- return {'nodes': nodes}
-
def _stopgraft(ui, repo, graftstate):
"""stop the interrupted graft"""
if not graftstate.exists():