tests/test-bundle-type.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Wed, 21 Feb 2024 13:05:29 +0100
changeset 51420 ac1c75188440
parent 50392 385a4f8056e5
child 51562 eac84af0c8cc
permissions -rw-r--r--
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