Patchwork D6566: abort: first prototype of hg abort

login
register
mail settings
Submitter phabricator
Date June 24, 2019, 3:06 p.m.
Message ID <ac050d5bdfd22b33ee35a5ad2a8ee534@localhost.localdomain>
Download mbox | patch
Permalink /patch/40665/
State Not Applicable
Headers show

Comments

phabricator - June 24, 2019, 3:06 p.m.
taapas1128 updated this revision to Diff 15646.

REPOSITORY
  rHG Mercurial

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

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-completion.t
  tests/test-globalopts.t
  tests/test-help-hide.t
  tests/test-help.t

CHANGE DETAILS




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

Patch

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
@@ -199,6 +202,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
@@ -399,6 +403,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
@@ -2350,6 +2355,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
@@ -155,6 +156,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
@@ -447,6 +448,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
@@ -57,6 +58,7 @@ 
 
 Show all commands that start with "a"
   $ hg debugcomplete a
+  abort
   add
   addremove
   annotate
@@ -233,6 +235,7 @@ 
 
 Show all commands + options
   $ hg debugcommands
+  abort: 
   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/mercurial/state.py b/mercurial/state.py
--- a/mercurial/state.py
+++ b/mercurial/state.py
@@ -99,7 +99,7 @@ 
 
     def __init__(self, opname, fname, clearable=False, allowcommit=False,
                  reportonly=False, continueflag=False, stopflag=False ,
-                 cmdmsg="", cmdhint="", statushint=""):
+                 cmdmsg="", cmdhint="", statushint="", abortfunc=None):
         """opname is the name the command or operation
         fname is the file name in which data should be stored in .hg directory.
         It is None for merge command.
@@ -133,6 +133,7 @@ 
         self._stopflag = stopflag
         self._reportonly = reportonly
         self._continueflag = continueflag
+        self._abortfunc = abortfunc
 
     def statusmsg(self):
         """returns the hint message corresponding to the command for
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -131,6 +131,28 @@ 
 
 # Commands start here, listed alphabetically
 
+@command('abort', [], helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
+        helpbasic=True)
+def abort(ui, repo, **opts):
+    """abort an unfinished operation
+
+    This function is the first prototype for hg abort command.
+    It first checks the state and checks which command is active
+    then calls then returns the respective logic for aborting the
+    command.
+    """
+    abortstate = None
+    for state in statemod._unfinishedstates:
+        if state.isunfinished(repo):
+            abortstate = state
+            break
+    if not abortstate:
+        raise error.Abort(_('no operation in progress'))
+    if abortstate._abortfunc:
+        return abortstate._abortfunc(ui, repo)
+    raise error.Abort((_("%s does not support 'hg abort'") %
+                        (abortstate._opname)), hint=abortstate.hint())
+
 @command('add',
     walkopts + subrepoopts + dryrunopts,
     _('[OPTION]... [FILE]...'),