rebase: avoid converting from nodes to revnums twice
In the case where the node has successors, but none of them is an
ancestor of the destination, we would iterate over the successor nodes
twice, check if they're in the repo and convert them to revnums. I
doubt it's a measureable cost, but it gets simpler this way too.
Differential Revision: https://phab.mercurial-scm.org/D3941
--- a/hgext/rebase.py Wed Jul 11 15:03:39 2018 -0700
+++ b/hgext/rebase.py Wed Jul 11 15:01:47 2018 -0700
@@ -1869,19 +1869,17 @@
# no successor
obsoletenotrebased[srcrev] = None
else:
- destnode = cl.node(destmap[srcrev])
- for succnode in successors:
- if succnode not in nodemap:
- continue
- if cl.isancestor(succnode, destnode):
- obsoletenotrebased[srcrev] = nodemap[succnode]
+ dstrev = destmap[srcrev]
+ succrevs = [nodemap[s] for s in successors if s in nodemap]
+ for succrev in succrevs:
+ if cl.isancestorrev(succrev, dstrev):
+ obsoletenotrebased[srcrev] = succrev
break
else:
# If 'srcrev' has a successor in rebase set but none in
# destination (which would be catched above), we shall skip it
# and its descendants to avoid divergence.
- if any(nodemap[s] in destmap for s in successors
- if s in nodemap):
+ if any(s in destmap for s in succrevs):
obsoletewithoutsuccessorindestination.add(srcrev)
return (