# HG changeset patch # User Martin von Zweigbergk # Date 1531346507 25200 # Node ID 0f8599afb92f6ca2ce0e1fbc3e4ca76b4961d2b2 # Parent 99ed6e2f6606d4793c1ca45d3fa00a1f8b0aa39a 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 diff -r 99ed6e2f6606 -r 0f8599afb92f hgext/rebase.py --- 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 (