D6566: abort: added logic for of hg abort

taapas1128 (Taapas Agrawal) phabricator at mercurial-scm.org
Thu Jul 4 11:00:47 EDT 2019


taapas1128 edited the summary of this revision.
taapas1128 retitled this revision from "abort: first prototype of hg abort" to "abort: added logic for of hg abort".
taapas1128 updated this revision to Diff 15750.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6566?vs=15731&id=15750

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6566/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D6566

AFFECTED FILES
  mercurial/commands.py
  mercurial/state.py
  tests/test-commandserver.t
  tests/test-completion.t
  tests/test-globalopts.t
  tests/test-help-hide.t
  tests/test-help.t
  tests/test-hgweb-json.t

CHANGE DETAILS

diff --git a/tests/test-hgweb-json.t b/tests/test-hgweb-json.t
--- a/tests/test-hgweb-json.t
+++ b/tests/test-hgweb-json.t
@@ -1875,6 +1875,10 @@
   {
     "earlycommands": [
       {
+        "summary": "abort an unfinished operation",
+        "topic": "abort"
+      },
+      {
         "summary": "add the specified files on the next commit",
         "topic": "add"
       },
diff --git a/tests/test-help.t b/tests/test-help.t
--- a/tests/test-help.t
+++ b/tests/test-help.t
@@ -5,6 +5,7 @@
   
   basic commands:
   
+   abort         abort an unfinished operation
    add           add the specified files on the next commit
    annotate      show changeset information by line for each file
    clone         make a copy of an existing repository
@@ -26,6 +27,7 @@
   (use 'hg help' for the full list of commands or 'hg -v' for details)
 
   $ hg -q
+   abort         abort an unfinished operation
    add           add the specified files on the next commit
    annotate      show changeset information by line for each file
    clone         make a copy of an existing repository
@@ -73,6 +75,7 @@
   
   Change manipulation:
   
+   abort         abort an unfinished operation
    backout       reverse effect of earlier changeset
    graft         copy changes from other branches onto the current branch
    merge         merge another revision into working directory
@@ -201,6 +204,7 @@
   
   Change manipulation:
   
+   abort         abort an unfinished operation
    backout       reverse effect of earlier changeset
    graft         copy changes from other branches onto the current branch
    merge         merge another revision into working directory
@@ -402,6 +406,7 @@
   
   basic commands:
   
+   abort         abort an unfinished operation
    add           add the specified files on the next commit
    annotate, blame
                  show changeset information by line for each file
@@ -2353,6 +2358,13 @@
   <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
   
   <tr><td>
+  <a href="/help/abort">
+  abort
+  </a>
+  </td><td>
+  abort an unfinished operation
+  </td></tr>
+  <tr><td>
   <a href="/help/add">
   add
   </a>
diff --git a/tests/test-help-hide.t b/tests/test-help-hide.t
--- a/tests/test-help-hide.t
+++ b/tests/test-help-hide.t
@@ -21,6 +21,7 @@
   
   Change manipulation:
   
+   abort         abort an unfinished operation
    backout       reverse effect of earlier changeset
    graft         copy changes from other branches onto the current branch
    merge         merge another revision into working directory
@@ -157,6 +158,7 @@
   
   Change manipulation:
   
+   abort         abort an unfinished operation
    backout       reverse effect of earlier changeset
    graft         copy changes from other branches onto the current branch
    merge         merge another revision into working directory
diff --git a/tests/test-globalopts.t b/tests/test-globalopts.t
--- a/tests/test-globalopts.t
+++ b/tests/test-globalopts.t
@@ -317,6 +317,7 @@
   
   Change manipulation:
   
+   abort         abort an unfinished operation
    backout       reverse effect of earlier changeset
    graft         copy changes from other branches onto the current branch
    merge         merge another revision into working directory
@@ -449,6 +450,7 @@
   
   Change manipulation:
   
+   abort         abort an unfinished operation
    backout       reverse effect of earlier changeset
    graft         copy changes from other branches onto the current branch
    merge         merge another revision into working directory
diff --git a/tests/test-completion.t b/tests/test-completion.t
--- a/tests/test-completion.t
+++ b/tests/test-completion.t
@@ -1,5 +1,6 @@
 Show all commands except debug commands
   $ hg debugcomplete
+  abort
   add
   addremove
   annotate
@@ -59,6 +60,7 @@
 
 Show all commands that start with "a"
   $ hg debugcomplete a
+  abort
   add
   addremove
   annotate
@@ -235,6 +237,7 @@
 
 Show all commands + options
   $ hg debugcommands
+  abort: no-backup, dry-run
   add: include, exclude, subrepos, dry-run
   addremove: similarity, subrepos, include, exclude, dry-run
   annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, ignore-all-space, ignore-space-change, ignore-blank-lines, ignore-space-at-eol, include, exclude, template
diff --git a/tests/test-commandserver.t b/tests/test-commandserver.t
--- a/tests/test-commandserver.t
+++ b/tests/test-commandserver.t
@@ -62,6 +62,7 @@
   
   basic commands:
   
+   abort         abort an unfinished operation
    add           add the specified files on the next commit
    annotate      show changeset information by line for each file
    clone         make a copy of an existing repository
diff --git a/mercurial/state.py b/mercurial/state.py
--- a/mercurial/state.py
+++ b/mercurial/state.py
@@ -98,7 +98,8 @@
     """
 
     def __init__(self, opname, fname, clearable, allowcommit, reportonly,
-                 continueflag, stopflag, cmdmsg, cmdhint, statushint):
+                 continueflag, stopflag, cmdmsg, cmdhint, statushint,
+                 abortfunc):
         self._opname = opname
         self._fname = fname
         self._clearable = clearable
@@ -109,6 +110,7 @@
         self._cmdmsg = cmdmsg
         self._cmdhint = cmdhint
         self._statushint = statushint
+        self.abortfunc = abortfunc
 
     def statusmsg(self):
         """returns the hint message corresponding to the command for
@@ -157,7 +159,7 @@
 
 def addunfinished(opname, fname, clearable=False, allowcommit=False,
                   reportonly=False, continueflag=False, stopflag=False,
-                  cmdmsg="", cmdhint="", statushint=""):
+                  cmdmsg="", cmdhint="", statushint="", abortfunc=None):
     """this registers a new command or operation to unfinishedstates
     opname is the name the command or operation
     fname is the file name in which data should be stored in .hg directory.
@@ -181,10 +183,11 @@
     statushint is used to pass a different status message in case standard
     message of the format ('To continue:    hg cmdname --continue'
     'To abort:       hg cmdname --abort') is not desired
+    abortfunc stores the function required to abort an unfinished state.
     """
     statecheckobj = _statecheck(opname, fname, clearable, allowcommit,
                                 reportonly, continueflag, stopflag, cmdmsg,
-                                cmdhint, statushint)
+                                cmdhint, statushint, abortfunc)
     if opname == 'merge':
         _unfinishedstates.append(statecheckobj)
     else:
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -132,6 +132,39 @@
 
 # Commands start here, listed alphabetically
 
+ at command('abort',
+    [('', 'no-backup', False, _('do not save backup copies of files')),
+    ] + dryrunopts, helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
+    helpbasic=True)
+def abort(ui, repo, **opts):
+    """abort an unfinished operation
+
+    Aborts an multistep operation like graft, histedit, rebase, merge,
+    and unshelve if they are in an unfinished state.
+
+    use --dry-run/-n to dry run the command.
+    use --no-backup when no backup copies of files are needed when an
+    operation is aborted.
+    'hg abort --no-backup --dry-run' can be used. In such cases dry
+    run will be given priority.
+    A new operation can be added to this by registering the operation and
+    abort logic in the unfinishedstates list under statemod.
+    """
+    abortstate = None
+    dryrun = opts.get('dry_run')
+    for state in statemod._unfinishedstates:
+        if state.isunfinished(repo):
+            abortstate = state
+            break
+    if not abortstate:
+        raise error.Abort(_('no operation in progress'))
+    if not abortstate.abortfunc:
+        raise error.Abort((_("%s does not support 'hg abort'") %
+                            (abortstate._opname)), hint=abortstate.hint())
+    if dryrun:
+        ui.status(_('aborting %s\n') % (abortstate._opname))
+    return abortstate.abortfunc(ui, repo, **opts)
+
 @command('add',
     walkopts + subrepoopts + dryrunopts,
     _('[OPTION]... [FILE]...'),



To: taapas1128, #hg-reviewers
Cc: pulkit, martinvonz, mercurial-devel


More information about the Mercurial-devel mailing list