diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -425,13 +425,14 @@ def archive(ui, repo, dest, **opts): @command('backout', [('', 'merge', None, _('merge with old dirstate parent after backout')), + ('', 'commit', None, _('commit if no conflicts were encountered')), ('', 'parent', '', _('parent to choose when backing out merge (DEPRECATED)'), _('REV')), ('r', 'rev', '', _('revision to backout'), _('REV')), ('e', 'edit', False, _('invoke editor on commit messages')), ] + mergetoolopts + walkopts + commitopts + commitopts2, _('[OPTION]... [-r] REV')) -def backout(ui, repo, node=None, rev=None, **opts): +def backout(ui, repo, node=None, rev=None, commit=False, **opts): '''reverse effect of earlier changeset Prepare a new changeset with the effect of REV undone in the @@ -519,11 +520,12 @@ def backout(ui, repo, node=None, rev=Non if stats[3]: repo.ui.status(_("use 'hg resolve' to retry unresolved " "file merges\n")) - else: + return 1 + elif not commit: msg = _("changeset %s backed out, " "don't forget to commit.\n") ui.status(msg % short(node)) - return stats[3] > 0 + return 0 finally: ui.setconfig('ui', 'forcemerge', '', '') else: diff --git a/tests/test-backout.t b/tests/test-backout.t --- a/tests/test-backout.t +++ b/tests/test-backout.t @@ -43,6 +43,47 @@ specified explicitly) commit: (clean) update: (current) +commit option + + $ cd .. + $ hg init commit + $ cd commit + + $ echo tomatoes > a + $ hg add a + $ hg commit -d '0 0' -m tomatoes + + $ echo chair > b + $ hg add b + $ hg commit -d '1 0' -m chair + + $ echo grapes >> a + $ hg commit -d '2 0' -m grapes + + $ hg backout --commit -d '4 0' 1 --tool=:fail + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + changeset 3:1c2161e97c0a backs out changeset 1:22cb4f70d813 + $ hg summary + parent: 3:1c2161e97c0a tip + Backed out changeset 22cb4f70d813 + branch: default + commit: (clean) + update: (current) + + $ echo ypples > a + $ hg commit -d '5 0' -m ypples + + $ hg backout --commit -d '6 0' 2 --tool=:fail + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges + [1] + $ hg summary + parent: 4:ed99997b793d tip + ypples + branch: default + commit: 1 unresolved (clean) + update: (current) + file that was removed is recreated (this also tests that editor is not invoked if the commit message is specified explicitly) diff --git a/tests/test-completion.t b/tests/test-completion.t --- a/tests/test-completion.t +++ b/tests/test-completion.t @@ -217,7 +217,7 @@ Show all commands + options update: clean, check, date, rev, tool addremove: similarity, subrepos, include, exclude, dry-run archive: no-decode, prefix, rev, type, subrepos, include, exclude - backout: merge, parent, rev, edit, tool, include, exclude, message, logfile, date, user + backout: merge, commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user bisect: reset, good, bad, skip, extend, command, noupdate bookmarks: force, rev, delete, rename, inactive, template branch: force, clean