tests/test-bundle2-format.t
changeset 24686 e0e28e910fa3
parent 24641 60fecc5b14a4
child 25125 bd625cd4e5e7
equal deleted inserted replaced
24685:b3d78d82d84c 24686:e0e28e910fa3
    90   >         except ValueError, exc:
    90   >         except ValueError, exc:
    91   >             raise util.Abort('%s' % exc)
    91   >             raise util.Abort('%s' % exc)
    92   > 
    92   > 
    93   >     if opts['reply']:
    93   >     if opts['reply']:
    94   >         capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
    94   >         capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
    95   >         bundler.newpart('b2x:replycaps', data=capsstring)
    95   >         bundler.newpart('replycaps', data=capsstring)
    96   > 
    96   > 
    97   >     if opts['pushrace']:
    97   >     if opts['pushrace']:
    98   >         # also serve to test the assignement of data outside of init
    98   >         # also serve to test the assignement of data outside of init
    99   >         part = bundler.newpart('b2x:check:heads')
    99   >         part = bundler.newpart('check:heads')
   100   >         part.data = '01234567890123456789'
   100   >         part.data = '01234567890123456789'
   101   > 
   101   > 
   102   >     revs = opts['rev']
   102   >     revs = opts['rev']
   103   >     if 'rev' in opts:
   103   >     if 'rev' in opts:
   104   >         revs = scmutil.revrange(repo, opts['rev'])
   104   >         revs = scmutil.revrange(repo, opts['rev'])
   107   >             bundled = repo.revs('%ld::%ld', revs, revs)
   107   >             bundled = repo.revs('%ld::%ld', revs, revs)
   108   >             headmissing = [c.node() for c in repo.set('heads(%ld)', revs)]
   108   >             headmissing = [c.node() for c in repo.set('heads(%ld)', revs)]
   109   >             headcommon  = [c.node() for c in repo.set('parents(%ld) - %ld', revs, revs)]
   109   >             headcommon  = [c.node() for c in repo.set('parents(%ld) - %ld', revs, revs)]
   110   >             outgoing = discovery.outgoing(repo.changelog, headcommon, headmissing)
   110   >             outgoing = discovery.outgoing(repo.changelog, headcommon, headmissing)
   111   >             cg = changegroup.getlocalchangegroup(repo, 'test:bundle2', outgoing, None)
   111   >             cg = changegroup.getlocalchangegroup(repo, 'test:bundle2', outgoing, None)
   112   >             bundler.newpart('b2x:changegroup', data=cg.getchunks(),
   112   >             bundler.newpart('changegroup', data=cg.getchunks(),
   113   >                             mandatory=False)
   113   >                             mandatory=False)
   114   > 
   114   > 
   115   >     if opts['parts']:
   115   >     if opts['parts']:
   116   >        bundler.newpart('test:empty', mandatory=False)
   116   >        bundler.newpart('test:empty', mandatory=False)
   117   >        # add a second one to make sure we handle multiple parts
   117   >        # add a second one to make sure we handle multiple parts
   134   >        bundler.newpart('test:ping', mandatory=False)
   134   >        bundler.newpart('test:ping', mandatory=False)
   135   >     if opts['genraise']:
   135   >     if opts['genraise']:
   136   >        def genraise():
   136   >        def genraise():
   137   >            yield 'first line\n'
   137   >            yield 'first line\n'
   138   >            raise RuntimeError('Someone set up us the bomb!')
   138   >            raise RuntimeError('Someone set up us the bomb!')
   139   >        bundler.newpart('b2x:output', data=genraise(), mandatory=False)
   139   >        bundler.newpart('output', data=genraise(), mandatory=False)
   140   > 
   140   > 
   141   >     if path is None:
   141   >     if path is None:
   142   >        file = sys.stdout
   142   >        file = sys.stdout
   143   >     else:
   143   >     else:
   144   >         file = open(path, 'wb')
   144   >         file = open(path, 'wb')
   235 - no parts
   235 - no parts
   236 
   236 
   237 Test bundling
   237 Test bundling
   238 
   238 
   239   $ hg bundle2
   239   $ hg bundle2
   240   HG2Y\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   240   HG20\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   241 
   241 
   242 Test unbundling
   242 Test unbundling
   243 
   243 
   244   $ hg bundle2 | hg statbundle2
   244   $ hg bundle2 | hg statbundle2
   245   options count: 0
   245   options count: 0
   265 Simplest possible parameters form
   265 Simplest possible parameters form
   266 
   266 
   267 Test generation simple option
   267 Test generation simple option
   268 
   268 
   269   $ hg bundle2 --param 'caution'
   269   $ hg bundle2 --param 'caution'
   270   HG2Y\x00\x00\x00\x07caution\x00\x00\x00\x00 (no-eol) (esc)
   270   HG20\x00\x00\x00\x07caution\x00\x00\x00\x00 (no-eol) (esc)
   271 
   271 
   272 Test unbundling
   272 Test unbundling
   273 
   273 
   274   $ hg bundle2 --param 'caution' | hg statbundle2
   274   $ hg bundle2 --param 'caution' | hg statbundle2
   275   options count: 1
   275   options count: 1
   277   parts count:   0
   277   parts count:   0
   278 
   278 
   279 Test generation multiple option
   279 Test generation multiple option
   280 
   280 
   281   $ hg bundle2 --param 'caution' --param 'meal'
   281   $ hg bundle2 --param 'caution' --param 'meal'
   282   HG2Y\x00\x00\x00\x0ccaution meal\x00\x00\x00\x00 (no-eol) (esc)
   282   HG20\x00\x00\x00\x0ccaution meal\x00\x00\x00\x00 (no-eol) (esc)
   283 
   283 
   284 Test unbundling
   284 Test unbundling
   285 
   285 
   286   $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
   286   $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
   287   options count: 2
   287   options count: 2
   293 -------------------------------
   293 -------------------------------
   294 
   294 
   295 Test generation
   295 Test generation
   296 
   296 
   297   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants'
   297   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants'
   298   HG2Y\x00\x00\x00\x1ccaution meal=vegan elephants\x00\x00\x00\x00 (no-eol) (esc)
   298   HG20\x00\x00\x00\x1ccaution meal=vegan elephants\x00\x00\x00\x00 (no-eol) (esc)
   299 
   299 
   300 Test unbundling
   300 Test unbundling
   301 
   301 
   302   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
   302   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
   303   options count: 3
   303   options count: 3
   311 ---------------------------------------------------
   311 ---------------------------------------------------
   312 
   312 
   313 Test generation
   313 Test generation
   314 
   314 
   315   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
   315   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
   316   HG2Y\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
   316   HG20\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
   317 
   317 
   318 Test unbundling
   318 Test unbundling
   319 
   319 
   320   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
   320   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
   321   options count: 2
   321   options count: 2
   335 ---------------------------------------------------
   335 ---------------------------------------------------
   336 
   336 
   337 bundling debug
   337 bundling debug
   338 
   338 
   339   $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2
   339   $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2
   340   start emission of HG2Y stream
   340   start emission of HG20 stream
   341   bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
   341   bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
   342   start of parts
   342   start of parts
   343   end of bundle
   343   end of bundle
   344 
   344 
   345 file content is ok
   345 file content is ok
   346 
   346 
   347   $ cat ../out.hg2
   347   $ cat ../out.hg2
   348   HG2Y\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
   348   HG20\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
   349 
   349 
   350 unbundling debug
   350 unbundling debug
   351 
   351 
   352   $ hg statbundle2 --debug < ../out.hg2
   352   $ hg statbundle2 --debug < ../out.hg2
   353   start processing of HG2Y stream
   353   start processing of HG20 stream
   354   reading bundle2 stream parameters
   354   reading bundle2 stream parameters
   355   ignoring unknown parameter 'e|! 7/'
   355   ignoring unknown parameter 'e|! 7/'
   356   ignoring unknown parameter 'simple'
   356   ignoring unknown parameter 'simple'
   357   options count: 2
   357   options count: 2
   358   - e|! 7/
   358   - e|! 7/
   382 
   382 
   383 Test part
   383 Test part
   384 =================
   384 =================
   385 
   385 
   386   $ hg bundle2 --parts ../parts.hg2 --debug
   386   $ hg bundle2 --parts ../parts.hg2 --debug
   387   start emission of HG2Y stream
   387   start emission of HG20 stream
   388   bundle parameter: 
   388   bundle parameter: 
   389   start of parts
   389   start of parts
   390   bundle part: "test:empty"
   390   bundle part: "test:empty"
   391   bundle part: "test:empty"
   391   bundle part: "test:empty"
   392   bundle part: "test:song"
   392   bundle part: "test:song"
   395   bundle part: "test:song"
   395   bundle part: "test:song"
   396   bundle part: "test:ping"
   396   bundle part: "test:ping"
   397   end of bundle
   397   end of bundle
   398 
   398 
   399   $ cat ../parts.hg2
   399   $ cat ../parts.hg2
   400   HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   400   HG20\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   401   test:empty\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   401   test:empty\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   402   test:empty\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10	test:song\x00\x00\x00\x02\x00\x00\x00\x00\x00\xb2Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko (esc)
   402   test:empty\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10	test:song\x00\x00\x00\x02\x00\x00\x00\x00\x00\xb2Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko (esc)
   403   Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
   403   Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
   404   Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.\x00\x00\x00\x00\x00\x00\x00\x16\x0ftest:debugreply\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00+	test:math\x00\x00\x00\x04\x02\x01\x02\x04\x01\x04\x07\x03pi3.14e2.72cookingraw\x00\x00\x00\x0242\x00\x00\x00\x00\x00\x00\x00\x1d	test:song\x00\x00\x00\x05\x01\x00\x0b\x00randomparam\x00\x00\x00\x00\x00\x00\x00\x10	test:ping\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   404   Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.\x00\x00\x00\x00\x00\x00\x00\x16\x0ftest:debugreply\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00+	test:math\x00\x00\x00\x04\x02\x01\x02\x04\x01\x04\x07\x03pi3.14e2.72cookingraw\x00\x00\x00\x0242\x00\x00\x00\x00\x00\x00\x00\x1d	test:song\x00\x00\x00\x05\x01\x00\x0b\x00randomparam\x00\x00\x00\x00\x00\x00\x00\x10	test:ping\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   405 
   405 
   435       advisory: 0
   435       advisory: 0
   436       payload: 0 bytes
   436       payload: 0 bytes
   437   parts count:   7
   437   parts count:   7
   438 
   438 
   439   $ hg statbundle2 --debug < ../parts.hg2
   439   $ hg statbundle2 --debug < ../parts.hg2
   440   start processing of HG2Y stream
   440   start processing of HG20 stream
   441   reading bundle2 stream parameters
   441   reading bundle2 stream parameters
   442   options count: 0
   442   options count: 0
   443   start extraction of bundle2 parts
   443   start extraction of bundle2 parts
   444   part header size: 17
   444   part header size: 17
   445   part type: "test:empty"
   445   part type: "test:empty"
   514 =======================================
   514 =======================================
   515 
   515 
   516 Process the bundle
   516 Process the bundle
   517 
   517 
   518   $ hg unbundle2 --debug < ../parts.hg2
   518   $ hg unbundle2 --debug < ../parts.hg2
   519   start processing of HG2Y stream
   519   start processing of HG20 stream
   520   reading bundle2 stream parameters
   520   reading bundle2 stream parameters
   521   start extraction of bundle2 parts
   521   start extraction of bundle2 parts
   522   part header size: 17
   522   part header size: 17
   523   part type: "test:empty"
   523   part type: "test:empty"
   524   part id: "0"
   524   part id: "0"
   608   3 total verses sung
   608   3 total verses sung
   609 
   609 
   610 The reply is a bundle
   610 The reply is a bundle
   611 
   611 
   612   $ cat ../reply.hg2
   612   $ cat ../reply.hg2
   613   HG2Y\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
   613   HG20\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x00\x00\x01\x0b\x01in-reply-to3\x00\x00\x00\xd9The choir starts singing: (esc)
   614   b2x:output\x00\x00\x00\x00\x00\x01\x0b\x01in-reply-to3\x00\x00\x00\xd9The choir starts singing: (esc)
       
   615       Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
   614       Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
   616       Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
   615       Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
   617       Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
   616       Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
   618   \x00\x00\x00\x00\x00\x00\x00\x1f (esc)
   617   \x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00\xc9debugreply: capabilities: (esc)
   619   b2x:output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00\xc9debugreply: capabilities: (esc)
       
   620   debugreply:     'city=!'
   618   debugreply:     'city=!'
   621   debugreply:         'celeste,ville'
   619   debugreply:         'celeste,ville'
   622   debugreply:     'elephants'
   620   debugreply:     'elephants'
   623   debugreply:         'babar'
   621   debugreply:         'babar'
   624   debugreply:         'celeste'
   622   debugreply:         'celeste'
   625   debugreply:     'ping-pong'
   623   debugreply:     'ping-pong'
   626   \x00\x00\x00\x00\x00\x00\x00\x1e	test:pong\x00\x00\x00\x02\x01\x00\x0b\x01in-reply-to7\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
   624   \x00\x00\x00\x00\x00\x00\x00\x1e	test:pong\x00\x00\x00\x02\x01\x00\x0b\x01in-reply-to7\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x03\x00\x01\x0b\x01in-reply-to7\x00\x00\x00=received ping request (id 7) (esc)
   627   b2x:output\x00\x00\x00\x03\x00\x01\x0b\x01in-reply-to7\x00\x00\x00=received ping request (id 7) (esc)
       
   628   replying to ping request (id 7)
   625   replying to ping request (id 7)
   629   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   626   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   630 
   627 
   631 The reply is valid
   628 The reply is valid
   632 
   629 
   633   $ hg statbundle2 < ../reply.hg2
   630   $ hg statbundle2 < ../reply.hg2
   634   options count: 0
   631   options count: 0
   635     :b2x:output:
   632     :output:
   636       mandatory: 0
   633       mandatory: 0
   637       advisory: 1
   634       advisory: 1
   638       payload: 217 bytes
   635       payload: 217 bytes
   639     :b2x:output:
   636     :output:
   640       mandatory: 0
   637       mandatory: 0
   641       advisory: 1
   638       advisory: 1
   642       payload: 201 bytes
   639       payload: 201 bytes
   643     :test:pong:
   640     :test:pong:
   644       mandatory: 1
   641       mandatory: 1
   645       advisory: 0
   642       advisory: 0
   646       payload: 0 bytes
   643       payload: 0 bytes
   647     :b2x:output:
   644     :output:
   648       mandatory: 0
   645       mandatory: 0
   649       advisory: 1
   646       advisory: 1
   650       payload: 61 bytes
   647       payload: 61 bytes
   651   parts count:   4
   648   parts count:   4
   652 
   649 
   712   list of changesets:
   709   list of changesets:
   713   32af7686d403cf45b5d95f2d70cebea587ac806a
   710   32af7686d403cf45b5d95f2d70cebea587ac806a
   714   9520eea781bcca16c1e15acc0ba14335a0e8e5ba
   711   9520eea781bcca16c1e15acc0ba14335a0e8e5ba
   715   eea13746799a9e0bfd88f29d3c2e9dc9389f524f
   712   eea13746799a9e0bfd88f29d3c2e9dc9389f524f
   716   02de42196ebee42ef284b6780a87cdc96e8eaab6
   713   02de42196ebee42ef284b6780a87cdc96e8eaab6
   717   start emission of HG2Y stream
   714   start emission of HG20 stream
   718   bundle parameter: 
   715   bundle parameter: 
   719   start of parts
   716   start of parts
   720   bundle part: "b2x:changegroup"
   717   bundle part: "changegroup"
   721   bundling: 1/4 changesets (25.00%)
   718   bundling: 1/4 changesets (25.00%)
   722   bundling: 2/4 changesets (50.00%)
   719   bundling: 2/4 changesets (50.00%)
   723   bundling: 3/4 changesets (75.00%)
   720   bundling: 3/4 changesets (75.00%)
   724   bundling: 4/4 changesets (100.00%)
   721   bundling: 4/4 changesets (100.00%)
   725   bundling: 1/4 manifests (25.00%)
   722   bundling: 1/4 manifests (25.00%)
   730   bundling: E 2/3 files (66.67%)
   727   bundling: E 2/3 files (66.67%)
   731   bundling: H 3/3 files (100.00%)
   728   bundling: H 3/3 files (100.00%)
   732   end of bundle
   729   end of bundle
   733 
   730 
   734   $ cat ../rev.hg2
   731   $ cat ../rev.hg2
   735   HG2Y\x00\x00\x00\x00\x00\x00\x00\x16\x0fb2x:changegroup\x00\x00\x00\x00\x00\x00\x00\x00\x06\x13\x00\x00\x00\xa42\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j_\xdd\xd9\x89W\xc8\xa5JMCm\xfe\x1d\xa9\xd8\x7f!\xa1\xb9{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x002\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e20c (esc)
   732   HG20\x00\x00\x00\x00\x00\x00\x00\x12\x0bchangegroup\x00\x00\x00\x00\x00\x00\x00\x00\x06\x13\x00\x00\x00\xa42\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j_\xdd\xd9\x89W\xc8\xa5JMCm\xfe\x1d\xa9\xd8\x7f!\xa1\xb9{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x002\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e20c (esc)
   736   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02D (esc)
   733   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02D (esc)
   737   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01D\x00\x00\x00\xa4\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xcd\x01\x0b\x8c\xd9\x98\xf3\x98\x1aZ\x81\x15\xf9O\x8d\xa4\xabP`\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)4dece9c826f69490507b98c6383a3009b295837d (esc)
   734   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01D\x00\x00\x00\xa4\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xcd\x01\x0b\x8c\xd9\x98\xf3\x98\x1aZ\x81\x15\xf9O\x8d\xa4\xabP`\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)4dece9c826f69490507b98c6383a3009b295837d (esc)
   738   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02E (esc)
   735   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02E (esc)
   739   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01E\x00\x00\x00\xa2\xee\xa17Fy\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO$\xb68|\x8c\x8c\xae7\x17\x88\x80\xf3\xfa\x95\xde\xd3\xcb\x1c\xf7\x85\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xee\xa17Fy\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)365b93d57fdf4814e2b5911d6bacff2b12014441 (esc)
   736   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01E\x00\x00\x00\xa2\xee\xa17Fy\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO$\xb68|\x8c\x8c\xae7\x17\x88\x80\xf3\xfa\x95\xde\xd3\xcb\x1c\xf7\x85\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xee\xa17Fy\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)365b93d57fdf4814e2b5911d6bacff2b12014441 (esc)
   740   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01G\x00\x00\x00\xa4\x02\xdeB\x19n\xbe\xe4.\xf2\x84\xb6x (esc)
   737   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01G\x00\x00\x00\xa4\x02\xdeB\x19n\xbe\xe4.\xf2\x84\xb6x (esc)
   755   \x87\xcd\xc9n\x8e\xaa\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02H (esc)
   752   \x87\xcd\xc9n\x8e\xaa\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02H (esc)
   756   \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   753   \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   757 
   754 
   758   $ hg debugbundle ../rev.hg2
   755   $ hg debugbundle ../rev.hg2
   759   Stream params: {}
   756   Stream params: {}
   760   b2x:changegroup -- '{}'
   757   changegroup -- '{}'
   761       32af7686d403cf45b5d95f2d70cebea587ac806a
   758       32af7686d403cf45b5d95f2d70cebea587ac806a
   762       9520eea781bcca16c1e15acc0ba14335a0e8e5ba
   759       9520eea781bcca16c1e15acc0ba14335a0e8e5ba
   763       eea13746799a9e0bfd88f29d3c2e9dc9389f524f
   760       eea13746799a9e0bfd88f29d3c2e9dc9389f524f
   764       02de42196ebee42ef284b6780a87cdc96e8eaab6
   761       02de42196ebee42ef284b6780a87cdc96e8eaab6
   765   $ hg unbundle ../rev.hg2
   762   $ hg unbundle ../rev.hg2
   774   $ hg unbundle2 ../rev-reply.hg2 < ../rev-rr.hg2
   771   $ hg unbundle2 ../rev-reply.hg2 < ../rev-rr.hg2
   775   0 unread bytes
   772   0 unread bytes
   776   addchangegroup return: 1
   773   addchangegroup return: 1
   777 
   774 
   778   $ cat ../rev-reply.hg2
   775   $ cat ../rev-reply.hg2
   779   HG2Y\x00\x00\x00\x00\x00\x00\x003\x15b2x:reply:changegroup\x00\x00\x00\x00\x00\x02\x0b\x01\x06\x01in-reply-to1return1\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
   776   HG20\x00\x00\x00\x00\x00\x00\x00/\x11reply:changegroup\x00\x00\x00\x00\x00\x02\x0b\x01\x06\x01in-reply-to1return1\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to1\x00\x00\x00dadding changesets (esc)
   780   b2x:output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to1\x00\x00\x00dadding changesets (esc)
       
   781   adding manifests
   777   adding manifests
   782   adding file changes
   778   adding file changes
   783   added 0 changesets with 0 changes to 3 files
   779   added 0 changesets with 0 changes to 3 files
   784   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   780   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   785 
   781 
   791   [255]
   787   [255]
   792 
   788 
   793 Should still be a valid bundle
   789 Should still be a valid bundle
   794 
   790 
   795   $ cat ../genfailed.hg2
   791   $ cat ../genfailed.hg2
   796   HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   792   HG20\x00\x00\x00\x00\x00\x00\x00\r (no-eol) (esc)
   797   b2x:output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00L\x0fb2x:error:abort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set up us the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   793   \x06output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00H\x0berror:abort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set up us the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
   798 
   794 
   799 And its handling on the other size raise a clean exception
   795 And its handling on the other size raise a clean exception
   800 
   796 
   801   $ cat ../genfailed.hg2 | hg unbundle2
   797   $ cat ../genfailed.hg2 | hg unbundle2
   802   0 unread bytes
   798   0 unread bytes