Mercurial > hg
view tests/test-merge-subrepos.t @ 35767:5f5fb279fd39
streamclone: also stream caches to the client
When stream clone is used over bundle2, relevant cache files are also streamed.
This is expected to be a massive performance win for clone since no important
cache will have to be recomputed.
Some performance numbers:
(All times are wall-clock times in seconds, 2 attempts per case.)
# Mozilla-Central
## Clone over ssh over lan
V1 streaming: 234.3 239.6
V2 streaming: 248.4 243.7
## Clone over ssh over Internet
V1 streaming: 175.5 110.9
V2 streaming: 109.1 111.0
## Clone over HTTP over lan
V1 streaming: 105.3 105.6
V2 streaming: 112.7 111.4
## Clone over HTTP over internet
V1 streaming: 105.6 114.6
V2 streaming: 226.7 225.9
## Hg tags
V1 streaming (no cache): 1.084 1.071
V2 streaming (cache): 0.312 0.325
## Hg branches
V1 streaming (no cache): 14.047 14.148
V2 streaming (with cache): 0.312 0.333
# Pypy
## Clone over ssh over internet
V1 streaming: 29.4 30.1
V2 streaming: 31.2 30.1
## Clone over http over internet
V1 streaming: 29.7 29.7
V2 streaming: 75.2 72.9
(since ssh and lan are not affected, there seems to be an issue with how we
read/write the http stream on connection with latency, unrelated to the format)
## Hg tags
V1 streaming (no cache): 1.752 1.664
V2 streaming (with cache): 0.274 0.260
## Hg branches
V1 streaming (no cache): 4.469 4.728
V2 streaming (with cache): 0.318 0.321
# Private repository:
* 500K revision revisions
* 11K topological heads
* 28K branch heads
## hg tags
no cache: 1543.332
with cache: 4.900
## hg branches
no cache: 91.828
with cache: 2.955
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 18 Jan 2018 00:50:12 +0100 |
parents | 4441705b7111 |
children | f785073f792c |
line wrap: on
line source
$ hg init $ echo a > a $ hg ci -qAm 'add a' $ hg init subrepo $ echo 'subrepo = http://example.net/libfoo' > .hgsub $ hg ci -qAm 'added subrepo' $ hg up -qC 0 $ echo ax > a $ hg ci -m 'changed a' created new head $ hg up -qC 1 $ cd subrepo $ echo b > b $ hg add b $ cd .. Should fail, since there are added files to subrepo: $ hg merge abort: uncommitted changes in subrepository "subrepo" [255] Deleted files trigger a '+' marker in top level repos. Deleted files are also noticed by `update --check` in the top level repo. $ hg ci -Sqm 'add b' $ echo change > subrepo/b $ hg ci -Sm 'change b' committing subrepository subrepo $ rm a $ hg id 9bfe45a197d7+ tip $ hg sum parent: 4:9bfe45a197d7 tip change b branch: default commit: 1 deleted (clean) update: 1 new changesets, 2 branch heads (merge) phases: 5 draft $ hg up --check -r '.^' abort: uncommitted changes [255] $ hg st -S ! a $ hg up -Cq . Test that dirty is consistent through subrepos $ rm subrepo/b A deleted subrepo file is flagged as dirty, like the top level repo $ hg id --config extensions.blackbox= --config blackbox.dirty=True 9bfe45a197d7+ tip $ cat .hg/blackbox.log * @9bfe45a197d7b0ab09bf287729dd57e9619c9da5+ (*)> serve --cmdserver chgunix * (glob) (chg !) * @9bfe45a197d7b0ab09bf287729dd57e9619c9da5+ (*)> id --config *extensions.blackbox=* --config *blackbox.dirty=True* (glob) * @9bfe45a197d7b0ab09bf287729dd57e9619c9da5+ (*)> id --config *extensions.blackbox=* --config *blackbox.dirty=True* exited 0 * (glob) TODO: a deleted file should be listed as such, like the top level repo $ hg sum parent: 4:9bfe45a197d7 tip change b branch: default commit: (clean) update: 1 new changesets, 2 branch heads (merge) phases: 5 draft Modified subrepo files are noticed by `update --check` and `summary` $ echo mod > subrepo/b $ hg st -S M subrepo/b $ hg up -r '.^' --check abort: uncommitted changes in subrepository "subrepo" [255] $ hg sum parent: 4:9bfe45a197d7 tip change b branch: default commit: 1 subrepos update: 1 new changesets, 2 branch heads (merge) phases: 5 draft TODO: why is -R needed here? If it's because the subrepo is treated as a discrete unit, then this should probably warn or something. $ hg revert -R subrepo --no-backup subrepo/b -r . $ rm subrepo/b $ hg st -S ! subrepo/b `hg update --check` notices a subrepo with a missing file, like it notices a missing file in the top level repo. $ hg up -r '.^' --check abort: uncommitted changes in subrepository "subrepo" [255] $ hg up -r '.^' --config ui.interactive=True << EOF > d > EOF other [destination] changed b which local [working copy] deleted use (c)hanged version, leave (d)eleted, or leave (u)nresolved? d 1 files updated, 0 files merged, 0 files removed, 0 files unresolved XXX: There's a difference between wdir() and '.', so there should be a status. `hg files -S` from the top is also missing 'subrepo/b'. $ hg st -S $ hg st -R subrepo $ hg files -R subrepo [1] $ hg files -R subrepo -r '.' subrepo/b $ hg bookmark -r tip @other $ echo xyz > subrepo/c $ hg ci -SAm 'add c' adding subrepo/c committing subrepository subrepo created new head $ rm subrepo/c Merge sees deleted subrepo files as an uncommitted change $ hg merge @other abort: uncommitted changes in subrepository "subrepo" [255]