revset: make balanced addsets by orset() without using _combinesets()
As scmutil.revrange() was rewritten to not use _combinesets(), we no longer
need _combinesets().
--- a/mercurial/revset.py Sun Jul 05 12:35:42 2015 +0900
+++ b/mercurial/revset.py Sun Jul 05 12:50:09 2015 +0900
@@ -406,8 +406,13 @@
return getset(repo, getset(repo, subset, x), y)
def orset(repo, subset, *xs):
- rs = [getset(repo, subset, x) for x in xs]
- return _combinesets(rs)
+ assert xs
+ if len(xs) == 1:
+ return getset(repo, subset, xs[0])
+ p = len(xs) // 2
+ a = orset(repo, subset, *xs[:p])
+ b = orset(repo, subset, *xs[p:])
+ return a + b
def notset(repo, subset, x):
return subset - getset(repo, subset, x)
@@ -3107,20 +3112,6 @@
def __repr__(self):
return '<%s %r>' % (type(self).__name__, self._subset)
-# this function will be removed, or merged to addset or orset, when
-# - scmutil.revrange() can be rewritten to not combine calculated smartsets
-# - or addset can handle more than two sets without balanced tree
-def _combinesets(subsets):
- """Create balanced tree of addsets representing union of given sets"""
- if not subsets:
- return baseset()
- if len(subsets) == 1:
- return subsets[0]
- p = len(subsets) // 2
- xs = _combinesets(subsets[:p])
- ys = _combinesets(subsets[p:])
- return addset(xs, ys)
-
def _iterordered(ascending, iter1, iter2):
"""produce an ordered iteration from two iterators with the same order