# HG changeset patch # User Lucas Moscovicz # Date 2014-02-13 17:18:16 # Node ID cb18fe3461b15611f7f7bebcbd09e0d2d1e7a46e # Parent 2d52f37937b0f83077a4ffa8f381132329924c10 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 diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -2311,8 +2311,14 @@ class spanset(object): return lazyset(self, lambda r: r not in x) def __add__(self, x): - l = baseset(self) - return l + baseset(x) + def iterates(): + for r in self: + yield r + for r in x: + if r not in self: + yield r + + return lazyset(generatorset(iterates())) def __len__(self): if not self._hiddenrevs: