# [PATCH 11 of 12] histedit: simplify computation of rebased set

pierre-yves.david at logilab.fr pierre-yves.david at logilab.fr
Thu Sep 27 07:23:30 CDT 2012

```# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1348747197 -7200
# Node ID 81b00ea33e4cfafafa39af1d09b68e52d2df3bc8
# Parent  708200816fcc2b3a9cf52093f8446d220d15913d
histedit: simplify computation of rebased set

This complex code can be replaced by two simple revset calls.

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -584,26 +584,14 @@ def bootstrapcontinue(ui, repo, parentct

def between(repo, old, new, keep):
"""select and validate the set of revision to edit

When keep is false, the specified set can't have children."""
-    revs = [old]
-    current = old
-    while current != new:
-        ctx = repo[current]
-        if not keep and len(ctx.children()) > 1:
-            raise util.Abort(_('cannot edit history that would orphan nodes'))
-        if len(ctx.parents()) != 1 and ctx.parents()[1] != node.nullid:
-            raise util.Abort(_("can't edit history with merges"))
-        if not ctx.children():
-            current = new
-        else:
-            current = ctx.children()[0].node()
-            revs.append(current)
-    if len(repo[current].children()) and not keep:
+    revs = list(repo.set('%n::%n', old, new))
+    if not keep and repo.revs('(%ld::) - %ld', revs, revs):
raise util.Abort(_('cannot edit history that would orphan nodes'))
-    return revs
+    return [c.node() for c in revs]

def writestate(repo, parentnode, rules, keep, topmost, replacements):
fp = open(os.path.join(repo.path, 'histedit-state'), 'w')
pickle.dump((parentnode, rules, keep, topmost, replacements), fp)
```