From patchwork Thu Feb 6 18:02:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,4] revset: added lazyset implementation to branch revset From: Lucas Moscovicz X-Patchwork-Id: 3493 Message-Id: <464c7b677edfed6f7d00.1391709760@dev1037.prn2.facebook.com> To: mercurial-devel@selenic.com Date: Thu, 06 Feb 2014 10:02:40 -0800 # HG changeset patch # User Lucas Moscovicz # Date 1391645523 28800 # Wed Feb 05 16:12:03 2014 -0800 # Node ID 464c7b677edfed6f7d00199a08c8dd7e32e72bca # Parent ebd119f34a845b1a92462291e025879f80f4b2e7 revset: added lazyset implementation to branch revset Performance Benchmarking: $ time hg log -l1 -qr "branch(default)" 0:9117c6561b0b real 0m3.366s user 0m3.217s sys 0m0.095s $ time ./hg log -l1 -qr "branch(default)" 0:9117c6561b0b real 0m0.389s user 0m0.199s sys 0m0.061s diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -444,16 +444,16 @@ # note: falls through to the revspec case if no branch with # this name exists if pattern in repo.branchmap(): - return baseset([r for r in subset if matcher(repo[r].branch())]) + return lazyset(subset, lambda r: matcher(repo[r].branch())) else: - return baseset([r for r in subset if matcher(repo[r].branch())]) + return lazyset(subset, lambda r: matcher(repo[r].branch())) s = getset(repo, baseset(repo), x) b = set() for r in s: b.add(repo[r].branch()) s = s.set() - return baseset([r for r in subset if r in s or repo[r].branch() in b]) + return lazyset(subset, lambda r: r in s or repo[r].branch() in b) def bumped(repo, subset, x): """``bumped()``