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]...'), 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/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/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-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-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 @@

Main Commands

+ + abort + + + abort an unfinished operation + + add