From patchwork Mon Feb 7 17:26:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D12143: rank: compute property incrementally From: phabricator X-Patchwork-Id: 50478 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Mon, 7 Feb 2022 17:26:29 +0000 pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This replace the naive rank computation with a more efficient incremental method, avoiding computing the whole ancestor set when possible. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12143 AFFECTED FILES mercurial/revlog.py CHANGE DETAILS To: pacien, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -2491,7 +2491,16 @@ # maybe the index.append should compute it when applicable instead rank = RANK_UNKNOWN if self._format_version == CHANGELOGV2: - rank = len(list(self.ancestors([p1r, p2r], inclusive=True))) + 1 + if (p1r, p2r) == (nullrev, nullrev): + rank = 1 + elif p1r != nullrev and p2r == nullrev: + rank = 1 + self.fast_rank(p1r) + elif p1r == nullrev and p2r != nullrev: + rank = 1 + self.fast_rank(p2r) + else: # merge node + pmin, pmax = sorted((p1r, p2r)) + rank = 1 + self.fast_rank(pmax) + rank += sum(1 for _ in self.findmissingrevs([pmax], [pmin])) e = revlogutils.entry( flags=flags,