view tests/test-bundle-type.t @ 51550:463e63aa547c

stream-clone: disable gc for `_entries_walk` duration The number of small container created turn Python in a gc-frenzy that seriously impact performance. This significantly boost performance. The following number comes from a large private repository using perf::stream-locked-section: base-line: 35.04 seconds prev-change: 24.51 seconds (-30%) this-change: 20.88 seconds (-40% from baseline; -15% from previous changes)
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 26 Mar 2024 13:32:46 +0000
parents 385a4f8056e5
children eac84af0c8cc
line wrap: on
line source

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