Skip to content
Snippets Groups Projects
Commit f4277a35 authored by Boris Feld's avatar Boris Feld
Browse files

discovery: compute newly discovered missing in a more efficient way

Calling "descendants" is expensive, instead, we bound the walk inside the know set
of undecided revision.

This help with discovery performance:

# without the revset '%ld' improvement
$ hg perfdiscovery -R pypy-left pypy-right
before: wall 0.675631 comb 0.680000 user 0.670000 sys 0.010000 (median of 15)
after:  wall 0.520145 comb 0.530000 user 0.510000 sys 0.020000 (median of 19)

There is another series in flight that greatly improves performances of "%ld"
substitution in `repo.revs` call. If this changeset is applied above it, we
see a similar performance boost.

# with the revset '%ld' improvement
$ hg perfdiscovery -R pypy-left pypy-right
before: wall 0.477848 comb 0.480000 user 0.480000 sys 0.000000 (median of 22)
after:  wall 0.404163 comb 0.400000 user 0.400000 sys 0.000000 (median of 24)
parent c9e1104e
Branches
Tags
No related merge requests found
......@@ -187,14 +187,10 @@
def addmissings(self, missings):
"""registrer some nodes as missing"""
if self.missing:
new = self._repo.revs('descendants(%ld) - descendants(%ld)',
missings, self.missing)
self.missing.update(new)
else:
self.missing.update(self._repo.revs('descendants(%ld)', missings))
self.undecided.difference_update(self.missing)
newmissing = self._repo.revs('%ld::%ld', missings, self.undecided)
if newmissing:
self.missing.update(newmissing)
self.undecided.difference_update(newmissing)
def addinfo(self, sample):
"""consume an iterable of (rev, known) tuples"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment