phases: invalidate the phases set less often on retract boundary
We already have the information to update the phase set, so we do so directly
instead of invalidating the cache.
This show a sizeable speedup in our `perf::unbundle` benchmark on the
many-draft mozilla-try repository.
### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
# benchmark.name = hg.perf.perf-unbundle
# bin-env-vars.hg.flavor = no-rust
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.
issue6528 = disabled
# benchmark.variants.revs = last-10
before: 2.055259 seconds
after: 1.887064 seconds (-8.18%)
# benchmark.variants.revs = last-100
before: 2.409239 seconds
after: 2.222429 seconds (-7.75%)
# benchmark.variants.revs = last-1000
before: 3.945648 seconds
after: 3.762480 seconds (-4.64%)
bundle w/o type option
$ hg init t1
$ hg init t2
$ cd t1
$ echo blablablablabla > file.txt
$ hg ci -A -m commit_root
adding file.txt
$ echo kapoue > file.txt
$ hg ci -m commit_1
$ echo scrabageul > file.txt
$ hg ci -m commit_2
$ hg up 'desc("commit_root")'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo flagabalagla > file.txt
$ hg ci -m commit_3
created new head
$ echo aliofia > file.txt
$ hg ci -m commit_4
$ echo alklqo > file.txt
$ hg ci -m commit_5
$ echo peakfeo > file.txt
$ hg ci -m commit_6 --secret
$ hg phase --public --rev 'desc(commit_3)'
$ hg log -GT '[{phase}] {desc|firstline}\n'
@ [secret] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [public] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [public] commit_root
XXX the bundle generation is defined by a discovery round here. So the secret
changeset should be excluded.
$ hg bundle ../b1.hg ../t2
searching for changes
7 changesets found (known-bad-output !)
6 changesets found (missing-correct-output !)
$ cd ..
$ hg -R t2 unbundle ./b1.hg
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads) (known-bad-output !)
added 6 changesets with 6 changes to 1 files (+1 heads) (missing-correct-output !)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg -R t2 up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updated to "b9f5f740a8cd: commit_6"
1 other heads for branch "default"
$ hg -R t2 log -GT '[{phase}] {desc|firstline}\n'
@ [draft] commit_6 (known-bad-output !)
| (known-bad-output !)
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
Unknown compression type is rejected
$ hg init t3
$ hg -R t3 -q unbundle ./b1.hg
$ hg -R t3 bundle -a -t unknown out.hg
abort: unknown is not a recognized bundle specification
(see 'hg help bundlespec' for supported values for --type)
[10]
$ hg -R t3 bundle -a -t unknown-v2 out.hg
abort: unknown compression is not supported
(see 'hg help bundlespec' for supported values for --type)
[10]
test bundle types
=================
since we use --all, it is okay to include the secret changeset here. It is
unfortunate that the phase information for the secret one is lost.
$ testbundle() {
> echo % test bundle type $1
> echo '==================================='
> hg -R t1 bundle --all --type $1 ./b-$1.hg
> f -q -B6 -D ./b-$1.hg; echo
> hg debugbundle ./b-$1.hg
> hg debugbundle --spec ./b-$1.hg
> echo
> hg init repo-from-type-$1
> hg unbundle -R repo-from-type-$1 ./b-$1.hg
> hg -R repo-from-type-$1 log -GT '[{phase}] {desc|firstline}\n'
> echo
> }
$ for t in "None" "bzip2" "gzip" "none-v2" "v2" "v1" "gzip-v1" "v3"; do
> testbundle $t
> done
% test bundle type None
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
none-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type bzip2
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
bzip2-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type gzip
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {Compression: GZ}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
gzip-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type none-v2
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
none-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type v2
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
bzip2-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type v1
===================================
7 changesets found
HG10BZ
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
bzip2-v1
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type gzip-v1
===================================
7 changesets found
HG10GZ
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
gzip-v1
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type v3
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 7, targetphase: 2, version: 03} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
phase-heads -- {} (mandatory: True)
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d public
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55 draft
2ea90778052ba7558fab36e3fd5d149512ff986b draft
b9f5f740a8cd76700020e3903ee55ecff78bd3e5 secret
bzip2-v2;cg.version=03
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (4 drafts, 1 secrets)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [secret] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [public] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [public] commit_root
Compression level can be adjusted for bundle2 bundles
$ hg init test-complevel
$ cd test-complevel
$ cat > file0 << EOF
> this is a file
> with some text
> and some more text
> and other content
> EOF
$ cat > file1 << EOF
> this is another file
> with some other content
> and repeated, repeated, repeated, repeated content
> EOF
$ hg -q commit -A -m initial
$ hg bundle -a -t gzip-v2 gzip-v2.hg
1 changesets found
$ f --size gzip-v2.hg
gzip-v2.hg: size=468
$ hg --config experimental.bundlecomplevel=1 bundle -a -t gzip-v2 gzip-v2-level1.hg
1 changesets found
$ f --size gzip-v2-level1.hg
gzip-v2-level1.hg: size=475
$ hg --config experimental.bundlecomplevel.gzip=1 --config experimental.bundlelevel=9 bundle -a -t gzip-v2 gzip-v2-level1.hg
1 changesets found
$ f --size gzip-v2-level1.hg
gzip-v2-level1.hg: size=475
$ cd ..
#if zstd
$ for t in "zstd" "zstd-v2"; do
> testbundle $t
> done
% test bundle type zstd
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {Compression: ZS}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
zstd-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
% test bundle type zstd-v2
===================================
7 changesets found
HG20\x00\x00 (esc)
Stream params: {Compression: ZS}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
cache:rev-branch-cache -- {} (mandatory: False)
zstd-v2
adding changesets
adding manifests
adding file changes
added 7 changesets with 7 changes to 1 files (+1 heads)
new changesets ac39af4a9f7d:b9f5f740a8cd (7 drafts)
(run 'hg heads' to see heads, 'hg merge' to merge)
o [draft] commit_6
|
o [draft] commit_5
|
o [draft] commit_4
|
o [draft] commit_3
|
| o [draft] commit_2
| |
| o [draft] commit_1
|/
o [draft] commit_root
Explicit request for zstd on non-generaldelta repos
$ hg --config format.usegeneraldelta=false init nogd
$ hg -q -R nogd pull t1
$ hg -R nogd bundle -a -t zstd nogd-zstd
6 changesets found
zstd-v1 always fails
$ hg -R t1 bundle -a -t zstd-v1 zstd-v1
abort: compression engine zstd is not supported on v1 bundles
(see 'hg help bundlespec' for supported values for --type)
[10]
zstd supports threading
$ hg init test-compthreads
$ cd test-compthreads
$ hg debugbuilddag +3
$ hg --config experimental.bundlecompthreads=1 bundle -a -t zstd-v2 zstd-v2-threaded.hg
3 changesets found
$ cd ..
#else
zstd is a valid engine but isn't available
$ hg -R t1 bundle -a -t zstd irrelevant.hg
abort: compression engine zstd could not be loaded
[255]
#endif
test garbage file
$ echo garbage > bgarbage
$ hg init tgarbage
$ cd tgarbage
$ hg pull ../bgarbage
pulling from ../bgarbage
abort: ../bgarbage: not a Mercurial bundle
[255]
$ cd ..
test invalid bundle type
$ cd t1
$ hg bundle -a -t garbage ../bgarbage
abort: garbage is not a recognized bundle specification
(see 'hg help bundlespec' for supported values for --type)
[10]
$ cd ..
Test controlling the changegroup version
$ hg -R t1 bundle --config experimental.changegroup3=yes -a -t v2 ./v2-cg-default.hg
7 changesets found
$ hg debugbundle ./v2-cg-default.hg --part-type changegroup
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
$ hg debugbundle ./v2-cg-default.hg --spec
bzip2-v2
$ hg -R t1 bundle --config experimental.changegroup3=yes -a -t 'v2;cg.version=02' ./v2-cg-02.hg
7 changesets found
$ hg debugbundle ./v2-cg-02.hg --part-type changegroup
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 7, version: 02} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
$ hg debugbundle ./v2-cg-02.hg --spec
bzip2-v2
$ hg -R t1 bundle --config experimental.changegroup3=yes -a -t 'v2;cg.version=03' ./v2-cg-03.hg
7 changesets found
$ hg debugbundle ./v2-cg-03.hg --part-type changegroup
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 7, version: 03} (mandatory: True)
ac39af4a9f7d2aaa7d244720e57838be9bf63b03
901e97fadc587978ec52f2fa76af4aefc2d191e8
a8c3a1ed30eb71f03f476c5fa7ead831ef991a55
66e2c4b43e0cf8f0bdff0733a0b97ce57874e35d
624e609639853fe22c88d42a8fd1f53a0e9b7ebe
2ea90778052ba7558fab36e3fd5d149512ff986b
b9f5f740a8cd76700020e3903ee55ecff78bd3e5
$ hg debugbundle ./v2-cg-03.hg --spec
bzip2-v2;cg.version=03