# HG changeset patch # User Yuya Nishihara # Date 2014-03-08 09:52:16 # Node ID 3f83fc5cfe715d292069ee8417c83804f6c6c1e4 # Parent e01cff65f4c55822ea79783ce36c104b2c64d5bf backout: correct commit status of no changes made (BC) (issue4190) If backout generated no changes to commit, it showed wrong status, "changeset backs out changeset ", and raised TypeError with -v option. This changes the return code to 1, which is the same as "hg commit" and "hg rebase". diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -416,7 +416,8 @@ def backout(ui, repo, node=None, rev=Non See :hg:`help dates` for a list of formats valid for -d/--date. - Returns 0 on success, 1 if there are unresolved files. + Returns 0 on success, 1 if nothing to backout or there are unresolved + files. ''' if rev and node: raise util.Abort(_("please specify just one revision")) @@ -495,6 +496,9 @@ def backout(ui, repo, node=None, rev=Non return repo.commit(message, opts.get('user'), opts.get('date'), match, editor=e) newnode = cmdutil.commit(ui, repo, commitfunc, [], opts) + if not newnode: + ui.status(_("nothing changed\n")) + return 1 cmdutil.commitstatus(repo, newnode, branch, bheads) def nice(node): diff --git a/tests/test-backout.t b/tests/test-backout.t --- a/tests/test-backout.t +++ b/tests/test-backout.t @@ -409,6 +409,22 @@ on branch1, so no file1 and file2: $ cd .. +backout of empty changeset (issue4190) + + $ hg init emptycommit + $ cd emptycommit + + $ touch file1 + $ hg ci -Aqm file1 + $ hg branch -q branch1 + $ hg ci -qm branch1 + $ hg backout -v 1 + resolving manifests + nothing changed + [1] + + $ cd .. + Test usage of `hg resolve` in case of conflict (issue4163)