Patchwork [1,of,5] revset-rangeset: call `getset` on a `fullreposet`

login
register
mail settings
Submitter Pierre-Yves David
Date Oct. 17, 2014, 5:49 p.m.
Message ID <90c7efa25968d3a4aa67.1413568167@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/6372/
State Deferred
Headers show

Comments

Pierre-Yves David - Oct. 17, 2014, 5:49 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1413526244 25200
#      Thu Oct 16 23:10:44 2014 -0700
# Node ID 90c7efa25968d3a4aa67f13bc52cb334ce99ef07
# Parent  840be5ca03e1db16ba994e55597771c418166c97
revset-rangeset: call `getset` on a `fullreposet`

Calling `baseset(repo.changelog)` build a list for all revisions in the repo. And
we already have the lazy and efficient `fullreposet` class for this purpose.

This gives us the usual benefit ofs the fullreposet:

revset) 10:100
before) wall 0.002774 comb 0.000000 user 0.000000 sys 0.000000 (best of 797)
after)  wall 0.001977 comb 0.000000 user 0.000000 sys 0.000000 (best of 1244)

revset) parents(10):parents(100)
before) wall 0.005054 comb 0.000000 user 0.000000 sys 0.000000 (best of 481)
after)  wall 0.002060 comb 0.000000 user 0.000000 sys 0.000000 (best of 1056)

Patch

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -263,13 +263,12 @@  def symbolset(repo, subset, x):
     if x in symbols:
         raise error.ParseError(_("can't use %s here") % x)
     return stringset(repo, subset, x)
 
 def rangeset(repo, subset, x, y):
-    cl = baseset(repo.changelog)
-    m = getset(repo, cl, x)
-    n = getset(repo, cl, y)
+    m = getset(repo, fullreposet(repo), x)
+    n = getset(repo, fullreposet(repo), y)
 
     if not m or not n:
         return baseset()
     m, n = m.first(), n.last()