Mercurial > public > mercurial-scm > hg-stable
diff mercurial/phases.py @ 51606:e0194b3ea312
phases: use revision number in analyze_remote_phases
Same logic as the previous change to `new_heads`, see rationnal there.
This avoids a small number of `nodes -> revs` conversion speeding thing up in
the 100 milliseconds order of magnitude for the worses cases. However, the rest
of the logic is noisy enough that it hardly matters for now.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 05 Apr 2024 12:02:43 +0200 |
parents | b70628a9aa7e |
children | d8287e43540f |
line wrap: on
line diff
--- a/mercurial/phases.py Fri Apr 05 11:33:47 2024 +0200 +++ b/mercurial/phases.py Fri Apr 05 12:02:43 2024 +0200 @@ -1095,7 +1095,11 @@ advanceboundary(repo, trgetter(), phase, heads) -def analyzeremotephases(repo, subset, roots): +def analyze_remote_phases( + repo, + subset: Collection[int], + roots: Dict[bytes, bytes], +) -> Tuple[Collection[int], Collection[int]]: """Compute phases heads and root in a subset of node from root dict * subset is heads of the subset @@ -1107,7 +1111,6 @@ # build list from dictionary draft_roots = [] to_rev = repo.changelog.index.get_rev - to_node = repo.changelog.node for nhex, phase in roots.items(): if nhex == b'publishing': # ignore data related to publish option continue @@ -1125,11 +1128,8 @@ msg = _(b'ignoring unexpected root from remote: %i %s\n') repo.ui.warn(msg % (phase, nhex)) # compute heads - subset_revs = [to_rev(n) for n in subset] - public_heads = new_heads(repo, subset_revs, draft_roots) - draft_nodes = [to_node(r) for r in draft_roots] - public_nodes = [to_node(r) for r in public_heads] - return public_nodes, draft_nodes + public_heads = new_heads(repo, subset, draft_roots) + return public_heads, draft_roots class remotephasessummary: @@ -1143,14 +1143,18 @@ def __init__(self, repo, remotesubset, remoteroots): unfi = repo.unfiltered() + to_rev = unfi.changelog.index.rev + to_node = unfi.changelog.node self._allremoteroots = remoteroots self.publishing = remoteroots.get(b'publishing', False) - ana = analyzeremotephases(repo, remotesubset, remoteroots) - self.publicheads, self.draftroots = ana + remote_subset = [to_rev(n) for n in remotesubset] + heads, roots = analyze_remote_phases(repo, remote_subset, remoteroots) + self.publicheads = [to_node(r) for r in heads] + self.draftroots = [to_node(r) for r in roots] # Get the list of all "heads" revs draft on remote - dheads = unfi.set(b'heads(%ln::%ln)', self.draftroots, remotesubset) + dheads = unfi.set(b'heads(%ld::%ld)', roots, remote_subset) self.draftheads = [c.node() for c in dheads]