# HG changeset patch # User Dan Villiom Podlaski Christiansen # Date 2012-06-18 09:16:24 # Node ID f8af57c00a29cb52c7561fad1f7ab2d9e68b96cf # Parent 8ad08dcab7d95fe73b10765aa24c84c4ae51d6fa rebase: improve error message on improper phases The previous error message had two issues: The first issue was that it wasn't, in fact, an error but a warning, even though it described a fatal error condition preventing the successful completion of the command. The second was that it didn't mention the immutable changesets, leaving the user guessing at the true cause of the error. The main downside to this change is that we now get an 'abort: can't abort...' message which technically contradicts itself. In this case, I blame that on the two uses we have for the word; if it weren't for backwards compatibility, we could make util.Abort print out 'error: '. diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -565,10 +565,11 @@ def restorestatus(repo): def abort(repo, originalwd, target, state): 'Restore the repository to its original state' dstates = [s for s in state.values() if s != nullrev] - if [d for d in dstates if not repo[d].mutable()]: - repo.ui.warn(_("warning: immutable rebased changeset detected, " - "can't abort\n")) - return -1 + immutable = [d for d in dstates if not repo[d].mutable()] + if immutable: + raise util.Abort(_("can't abort rebase due to immutable changesets %s") + % ', '.join(str(repo[r]) for r in immutable), + hint=_('see hg help phases for details')) descendants = set() if dstates: diff --git a/tests/test-rebase-interruptions.t b/tests/test-rebase-interruptions.t --- a/tests/test-rebase-interruptions.t +++ b/tests/test-rebase-interruptions.t @@ -248,7 +248,8 @@ Change phase on B and B' Abort the rebasing: $ hg rebase --abort - warning: immutable rebased changeset detected, can't abort + abort: can't abort rebase due to immutable changesets 45396c49d53b + (see hg help phases for details) [255] $ hg tglogp