From patchwork Thu Jun 28 13:42:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [3, of, 3] revset: move lookup of first ancestor() candidate out of the loop From: Yuya Nishihara X-Patchwork-Id: 32482 Message-Id: <0005175b53bb3f829578.1530193376@mimosa> To: mercurial-devel@mercurial-scm.org Date: Thu, 28 Jun 2018 22:42:56 +0900 # HG changeset patch # User Yuya Nishihara # Date 1529159200 -32400 # Sat Jun 16 23:26:40 2018 +0900 # Node ID 0005175b53bb3f829578757c1c34eab60c7c42a8 # Parent fe4560fa5db2f1ee11cff233c55b7685e891517a revset: move lookup of first ancestor() candidate out of the loop diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -311,14 +311,15 @@ def ancestor(repo, subset, x): Will return empty list when passed no args. Greatest common ancestor of a single changeset is that changeset. """ - anc = None - for r in orset(repo, fullreposet(repo), x, order=anyorder): - if anc is None: - anc = repo[r] - else: - anc = anc.ancestor(repo[r]) + reviter = iter(orset(repo, fullreposet(repo), x, order=anyorder)) + try: + anc = repo[next(reviter)] + except StopIteration: + return baseset() + for r in reviter: + anc = anc.ancestor(repo[r]) - if anc is not None and anc.rev() in subset: + if anc.rev() in subset: return baseset([anc.rev()]) return baseset()