comparison mercurial/revset.py @ 20587:cb18fe3461b1

revset: changed spanset __add__ implementation to work lazily $ time hg log -qr "first(0:tip or draft())" ... real 0m1.032s user 0m0.841s sys 0m0.179s $ time ./hg log -qr "first(0:tip or draft())" ... real 0m0.378s user 0m0.291s sys 0m0.085s
author Lucas Moscovicz <lmoscovicz@fb.com>
date Thu, 13 Feb 2014 09:18:16 -0800
parents 2d52f37937b0
children 56ecc82fcd67
comparison
equal deleted inserted replaced
20586:2d52f37937b0 20587:cb18fe3461b1
2309 if isinstance(x, baseset): 2309 if isinstance(x, baseset):
2310 x = x.set() 2310 x = x.set()
2311 return lazyset(self, lambda r: r not in x) 2311 return lazyset(self, lambda r: r not in x)
2312 2312
2313 def __add__(self, x): 2313 def __add__(self, x):
2314 l = baseset(self) 2314 def iterates():
2315 return l + baseset(x) 2315 for r in self:
2316 yield r
2317 for r in x:
2318 if r not in self:
2319 yield r
2320
2321 return lazyset(generatorset(iterates()))
2316 2322
2317 def __len__(self): 2323 def __len__(self):
2318 if not self._hiddenrevs: 2324 if not self._hiddenrevs:
2319 return abs(self._end - self._start) 2325 return abs(self._end - self._start)
2320 else: 2326 else: