Mercurial > hg
annotate tests/test-hg-parseurl.py @ 24735:07200e3332a1
tags: extract .hgtags filenodes cache to a standalone file
Resolution of .hgtags filenodes values has historically been a
performance pain point for large repositories, where reading individual
manifests can take over 100ms. Multiplied by hundreds or even thousands
of heads and resolving .hgtags filenodes becomes a performance issue.
This patch establishes a standalone cache file holding the .hgtags
filenodes for each changeset. After this patch, the .hgtags filenode
for any particular changeset should only have to be computed once
during the lifetime of the repository.
The introduced hgtagsfnodes1 cache file is modeled after the rev branch
cache: the cache is effectively an array of entries consisting of a
changeset fragment and the filenode for a revision. The file grows in
proportion to the length of the repository (24 bytes per changeset) and
is truncated when the repository is stripped. The file is not written
unless tag info is requested and tags have changed since last time.
This patch partially addresses issue4550. Future patches will split the
"tags" cache file into per-filter files and will refactor the cache
format to not capture the .hgtags fnodes, as these are now stored in
the hgtagsfnodes1 cache. This patch is capable of standing alone. We
should not have to wait on the tags cache filter split and format
refactor for this patch to land.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 15 Apr 2015 17:42:38 -0400 |
parents | 375872fdadba |
children | 8a23f88131c3 |
rev | line source |
---|---|
8174
29bc5d18714a
hg: allow hg.parseurl(url, None)
Martijn Pieters <mj@zopatista.com>
parents:
diff
changeset
|
1 from mercurial.hg import parseurl |
29bc5d18714a
hg: allow hg.parseurl(url, None)
Martijn Pieters <mj@zopatista.com>
parents:
diff
changeset
|
2 |
10365
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
8174
diff
changeset
|
3 def testparse(url, branch=[]): |
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
8174
diff
changeset
|
4 print '%s, branches: %r' % parseurl(url, branch) |
8174
29bc5d18714a
hg: allow hg.parseurl(url, None)
Martijn Pieters <mj@zopatista.com>
parents:
diff
changeset
|
5 |
29bc5d18714a
hg: allow hg.parseurl(url, None)
Martijn Pieters <mj@zopatista.com>
parents:
diff
changeset
|
6 testparse('http://example.com/no/anchor') |
29bc5d18714a
hg: allow hg.parseurl(url, None)
Martijn Pieters <mj@zopatista.com>
parents:
diff
changeset
|
7 testparse('http://example.com/an/anchor#foo') |
10365
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
8174
diff
changeset
|
8 testparse('http://example.com/no/anchor/branches', branch=['foo']) |
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
8174
diff
changeset
|
9 testparse('http://example.com/an/anchor/branches#bar', branch=['foo']) |
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
8174
diff
changeset
|
10 testparse('http://example.com/an/anchor/branches-None#foo', branch=None) |
13897
375872fdadba
hg: make parseurl() consistently return normalised path
Thomas Arendsen Hein <thomas@intevation.de>
parents:
12865
diff
changeset
|
11 testparse('http://example.com/') |
375872fdadba
hg: make parseurl() consistently return normalised path
Thomas Arendsen Hein <thomas@intevation.de>
parents:
12865
diff
changeset
|
12 testparse('http://example.com') |
375872fdadba
hg: make parseurl() consistently return normalised path
Thomas Arendsen Hein <thomas@intevation.de>
parents:
12865
diff
changeset
|
13 testparse('http://example.com#foo') |