diff hgext/evolve.py @ 1101:8cac667a0d7d stable

prune: work around lazy revset slowdown Since 3.0 lazy revset is making some revset very slow. We currently work around the issue by using a simple loop instead.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Fri, 25 Apr 2014 14:14:29 -0700
parents bac4e0bc9f6a
children cb36a4eb0157
line wrap: on
line diff
--- a/hgext/evolve.py	Tue Sep 02 19:19:17 2014 +0200
+++ b/hgext/evolve.py	Fri Apr 25 14:14:29 2014 -0700
@@ -1870,11 +1870,19 @@
         if bookmark:
             _deletebookmark(ui, marks, bookmark)
         for ctx in repo.unfiltered().set('bookmark() and %ld', precs):
-            ldest = list(repo.set('max((::%d) - obsolete())', ctx))
-            if ldest:
-                dest = ldest[0]
-                updatebookmarks = _bookmarksupdater(repo, ctx.node())
-                updatebookmarks(dest.node())
+            # used to be:
+            #
+            #   ldest = list(repo.set('max((::%d) - obsolete())', ctx))
+            #   if ldest:
+            #      c = ldest[0]
+            #
+            # but then revset took a lazy arrow in the knee and became much
+            # slower. The new forms makes as much sense and a much faster.
+            for dest in ctx.ancestors():
+                if not dest.obsolete():
+                    updatebookmarks = _bookmarksupdater(repo, ctx.node())
+                    updatebookmarks(dest.node())
+                    break
     finally:
         lockmod.release(lock, wlock)