obsolete: drop usage of changectx in '_computecontentdivergentset'
authorBoris Feld <boris.feld@octobus.net>
Sun, 19 Nov 2017 05:34:50 +0100
changeset 35137 5cd6682b5a90
parent 35136 82680919d75e
child 35138 e397f8585953
obsolete: drop usage of changectx in '_computecontentdivergentset' Changectx are expensive and not needed there. The use of `repo.set` denote old code that predate the introduction of `repo.revs` that we now use. On my mercurial repository 495 draft: before: 0.054239 second after: 0.046935 second On a mercurial repository with 115973 draft: before: 0.564548 second after: 0.130534 second
mercurial/obsolete.py
--- a/mercurial/obsolete.py	Sun Nov 19 05:23:12 2017 +0100
+++ b/mercurial/obsolete.py	Sun Nov 19 05:34:50 2017 +0100
@@ -1023,8 +1023,10 @@
     divergent = set()
     obsstore = repo.obsstore
     newermap = {}
-    for ctx in repo.set('(not public()) - obsolete()'):
-        mark = obsstore.predecessors.get(ctx.node(), ())
+    tonode = repo.changelog.node
+    for rev in repo.revs('(not public()) - obsolete()'):
+        node = tonode(rev)
+        mark = obsstore.predecessors.get(node, ())
         toprocess = set(mark)
         seen = set()
         while toprocess:
@@ -1036,7 +1038,7 @@
                 obsutil.successorssets(repo, prec, cache=newermap)
             newer = [n for n in newermap[prec] if n]
             if len(newer) > 1:
-                divergent.add(ctx.rev())
+                divergent.add(rev)
                 break
             toprocess.update(obsstore.predecessors.get(prec, ()))
     return divergent