prefetc: point at the offending changeset when aborting
We do our best to display comptact but usable information.
--- a/hgext3rd/evolve/rewriteutil.py Mon Jul 24 02:06:14 2017 +0200
+++ b/hgext3rd/evolve/rewriteutil.py Mon Jul 24 03:04:20 2017 +0200
@@ -19,10 +19,12 @@
error,
hg,
lock as lockmod,
+ node,
obsolete,
phases,
repair,
revset,
+ util,
)
from mercurial.i18n import _
@@ -31,13 +33,37 @@
compat,
)
+def _formatrevs(repo, revs, maxrevs=4):
+ """return a string summarising revision in a descent size
+
+ If there is few enough revision, we list them otherwise we display a
+ summary in the form:
+
+ 1ea73414a91b and 5 others
+ """
+ tonode = repo.changelog.node
+ numrevs = len(revs)
+ if numrevs < maxrevs:
+ shorts = [node.short(tonode(r)) for r in revs]
+ summary = ', '.join(shorts)
+ else:
+ if util.safehasattr(revs, 'first'):
+ first = revs.first()
+ else:
+ first = revs[0]
+ summary = _('%s and %d others')
+ summary %= (node.short(tonode(first)), numrevs - 1)
+ return summary
+
def precheck(repo, revs, action='rewrite'):
"""check if <revs> can be rewritten
<action> can be used to control the commit message.
"""
- if repo.revs('%ld and public()', revs):
- msg = _("cannot %s public changesets") % action
+ publicrevs = repo.revs('%ld and public()', revs)
+ if publicrevs:
+ summary = _formatrevs(repo, publicrevs)
+ msg = _("cannot %s public changesets: %s") % (action, summary)
hint = _("see 'hg help phases' for details")
raise error.Abort(msg, hint=hint)
--- a/tests/test-fold.t Mon Jul 24 02:06:14 2017 +0200
+++ b/tests/test-fold.t Mon Jul 24 03:04:20 2017 +0200
@@ -73,7 +73,7 @@
[255]
$ hg phase --public 0
$ hg fold --from -r 0
- abort: cannot fold public changesets
+ abort: cannot fold public changesets: 1ea73414a91b
(see 'hg help phases' for details)
[255]
--- a/tests/test-metaedit.t Mon Jul 24 02:06:14 2017 +0200
+++ b/tests/test-metaedit.t Mon Jul 24 03:04:20 2017 +0200
@@ -103,7 +103,7 @@
abort: revisions must be specified with --fold
[255]
$ hg metaedit -r 0 --fold
- abort: cannot fold public changesets
+ abort: cannot fold public changesets: ea207398892e
(see 'hg help phases' for details)
[255]
$ hg metaedit 'desc(C) + desc(F)' --fold