view tests/test-bundle2.t @ 20808:4c9130c7a29f

bundle2: clarify stream parameter design in the documentation Stream level parameter have very restricted use case. Clarify why we chosen a textual format and point that applicative data goes in applicative parts.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Thu, 20 Mar 2014 13:18:34 -0700
parents c5aaeca0cfbf
children b93bb639451a
line wrap: on
line source


Create an extension to test bundle2 API

  $ cat > bundle2.py << EOF
  > """A small extension to test bundle2 implementation
  > 
  > Current bundle2 implementation is far too limited to be used in any core
  > code. We still need to be able to test it while it grow up.
  > """
  > 
  > import sys
  > from mercurial import cmdutil
  > from mercurial import bundle2
  > cmdtable = {}
  > command = cmdutil.command(cmdtable)
  > 
  > @command('bundle2',
  >          [('', 'param', [], 'stream level parameter'),],
  >          '')
  > def cmdbundle2(ui, repo, **opts):
  >     """write a bundle2 container on standard ouput"""
  >     bundler = bundle2.bundle20()
  >     for p in opts['param']:
  >         bundler.addparam(p)
  >     for chunk in bundler.getchunks():
  >         ui.write(chunk)
  > 
  > @command('unbundle2', [], '')
  > def cmdunbundle2(ui, repo):
  >     """read a bundle2 container from standard input"""
  >     unbundler = bundle2.unbundle20(sys.stdin)
  >     ui.write('options count: %i\n' % len(unbundler.params))
  >     for key in sorted(unbundler.params):
  >         ui.write('- %s\n' % key)
  >     parts = list(unbundler)
  >     ui.write('parts count:   %i\n' % len(parts))
  > EOF
  $ cat >> $HGRCPATH << EOF
  > [extensions]
  > bundle2=$TESTTMP/bundle2.py
  > EOF

The extension requires a repo (currently unused)

  $ hg init main
  $ cd main
  $ touch a
  $ hg add a
  $ hg commit -m 'a'


Empty bundle
=================

- no option
- no parts

Test bundling

  $ hg bundle2
  HG20\x00\x00\x00\x00 (no-eol) (esc)

Test unbundling

  $ hg bundle2 | hg unbundle2
  options count: 0
  parts count:   0

Test old style bundle are detected and refused

  $ hg bundle --all ../bundle.hg
  1 changesets found
  $ hg unbundle2 < ../bundle.hg
  abort: unknown bundle version 10
  [255]

Test parameters
=================

- some options
- no parts

advisory parameters, no value
-------------------------------

Simplest possible parameters form

Test generation simple option

  $ hg bundle2 --param 'caution'
  HG20\x00\x07caution\x00\x00 (no-eol) (esc)

Test unbundling

  $ hg bundle2 --param 'caution' | hg unbundle2
  options count: 1
  - caution
  parts count:   0

Test generation multiple option

  $ hg bundle2 --param 'caution' --param 'meal'
  HG20\x00\x0ccaution meal\x00\x00 (no-eol) (esc)

Test unbundling

  $ hg bundle2 --param 'caution' --param 'meal' | hg unbundle2
  options count: 2
  - caution
  - meal
  parts count:   0