histedit: resolve revs before evaluating %ld revset
authorGregory Szorc <gregory.szorc@gmail.com>
Sat, 24 Feb 2018 11:04:21 -0800
changeset 36409 72da480db4a5
parent 36408 83bade6206d4
child 36410 67ec4ad815e6
histedit: resolve revs before evaluating %ld revset We want to stop relying on basectx.__int__. That means we can't use the %ld revset operator with an iterable of contexts. So we expand an iterable of contexts into a list of revs before calling into the revset. Perhaps it would be worthwhile to add a revset format operator that recognizes context instances so we can just pass contexts as revset arguments? Differential Revision: https://phab.mercurial-scm.org/D2431
hgext/histedit.py
--- a/hgext/histedit.py	Sat Feb 24 11:20:24 2018 -0800
+++ b/hgext/histedit.py	Sat Feb 24 11:04:21 2018 -0800
@@ -1356,11 +1356,12 @@
     When keep is false, the specified set can't have children."""
     ctxs = list(repo.set('%n::%n', old, new))
     if ctxs and not keep:
+        revs = [ctx.rev() for ctx in ctxs]
         if (not obsolete.isenabled(repo, obsolete.allowunstableopt) and
-            repo.revs('(%ld::) - (%ld)', ctxs, ctxs)):
+            repo.revs('(%ld::) - (%ld)', revs, revs)):
             raise error.Abort(_('can only histedit a changeset together '
                                 'with all its descendants'))
-        if repo.revs('(%ld) and merge()', ctxs):
+        if repo.revs('(%ld) and merge()', revs):
             raise error.Abort(_('cannot edit history that contains merges'))
         root = ctxs[0] # list is already sorted by repo.set
         if not root.mutable():