Mercurial > public > mercurial-scm > hg
diff mercurial/obsolete.py @ 51658:a0f1378b932e stable
Backed out changeset f28c52a9f7b4
This backout and the previous are due to a large performance regression
detected in repositories with a lot of obsmarkers when performing a clone.
A better fix will come along at the start of the next cycle.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Mon, 08 Jul 2024 16:20:04 +0200 |
parents | 66aa49e6e5d1 |
children | 493034cc3265 e68fe567a780 |
line wrap: on
line diff
--- a/mercurial/obsolete.py Mon Jul 08 16:19:33 2024 +0200 +++ b/mercurial/obsolete.py Mon Jul 08 16:20:04 2024 +0200 @@ -771,11 +771,10 @@ _addchildren(self.children, markers) _checkinvalidmarkers(self.repo, markers) - def relevantmarkers(self, nodes=None, revs=None): - """return a set of all obsolescence markers relevant to a set of - nodes or revisions. + def relevantmarkers(self, nodes): + """return a set of all obsolescence markers relevant to a set of nodes. - "relevant" to a set of nodes or revisions mean: + "relevant" to a set of nodes mean: - marker that use this changeset as successor - prune marker of direct children on this changeset @@ -783,24 +782,10 @@ markers It is a set so you cannot rely on order.""" - if nodes is None: - nodes = set() - if revs is None: - revs = set() - get_rev = self.repo.unfiltered().changelog.index.get_rev - pendingnodes = set() - for marker in self._all: - for node in (marker[0],) + marker[1] + (marker[5] or ()): - if node in nodes: - pendingnodes.add(node) - elif revs: - rev = get_rev(node) - if rev is not None and rev in revs: - pendingnodes.add(node) + pendingnodes = set(nodes) seenmarkers = set() - seenmarkers = set() - seennodes = set() + seennodes = set(pendingnodes) precursorsmarkers = self.predecessors succsmarkers = self.successors children = self.children