revset: optimize "x & fullreposet" case
If self is a smartset and other is a fullreposet, nothing should be necessary.
A small win for trivial query in mozilla-central repo:
revset #0: (0:100000)
0) wall 0.017211 comb 0.020000 user 0.020000 sys 0.000000 (best of 163)
1) wall 0.001324 comb 0.000000 user 0.000000 sys 0.000000 (best of 2160)
--- a/mercurial/revset.py Mon Mar 16 18:36:53 2015 +0900
+++ b/mercurial/revset.py Mon Mar 16 17:11:25 2015 +0900
@@ -2718,6 +2718,8 @@
"""Returns a new object with the intersection of the two collections.
This is part of the mandatory API for smartset."""
+ if isinstance(other, fullreposet):
+ return self
return self.filter(other.__contains__, cache=False)
def __add__(self, other):
--- a/tests/test-revset.t Mon Mar 16 18:36:53 2015 +0900
+++ b/tests/test-revset.t Mon Mar 16 17:11:25 2015 +0900
@@ -100,8 +100,7 @@
('symbol', '0')
('symbol', '1'))
* set:
- <filteredset
- <spanset+ 0:1>>
+ <spanset+ 0:1>
0
1
$ try 3::6
@@ -109,8 +108,7 @@
('symbol', '3')
('symbol', '6'))
* set:
- <filteredset
- <baseset [3, 5, 6]>>
+ <baseset [3, 5, 6]>
3
5
6