Mercurial > hg
annotate hgext3rd/__init__.py @ 39264:d750a6c9248d stable
scmutil: avoid quadratic membership testing (issue5969)
tr.changes['revs'] is an xrange, which has an O(n) __contains__
implementation. The `rev not in newrevs` lookup a few lines below
will therefore be O(n^2) if all incoming changesets are public.
This issue isn't present on @ because 45e05d39d9ce introduced
a custom type implementing an xrange primitive with O(1) contains
and switched tr.changes['revs'] to be an instance of that type.
We work around the problem on the stable branch by casting the
xrange to a set. This is a bit hacky because it requires allocating
memory to hold each integer in the range. But we are already
holding the full set of pulled revision numbers in memory
multiple times (such as in `tr.changes['phases']`). So this is
a relatively minor problem.
This issue has been present since the phases reporting code was
introduced in the 4.7 cycle by eb9835014d20.
This change should be reverted/ignored when stable is merged into
default.
On the mozilla-unified repository with 483492 changesets, `hg clone`
time improves substantially:
before: 1843.700s user; 29.810s sys
after: 461.170s user; 29.360s sys
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 24 Aug 2018 18:21:55 -0700 |
parents | 4b81487a01d4 |
children | 2372284d9457 |
rev | line source |
---|---|
28541
4b81487a01d4
extensions: also search for extension in the 'hgext3rd' package
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28450
diff
changeset
|
1 # name space package to host third party extensions |
28450
155e3308289c
hgext: officially turn 'hgext' into a namespace package
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1360
diff
changeset
|
2 from __future__ import absolute_import |
155e3308289c
hgext: officially turn 'hgext' into a namespace package
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1360
diff
changeset
|
3 import pkgutil |
155e3308289c
hgext: officially turn 'hgext' into a namespace package
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1360
diff
changeset
|
4 __path__ = pkgutil.extend_path(__path__, __name__) |