Submitter | Pierre-Yves David |
---|---|
Date | Sept. 25, 2015, 10:08 p.m. |
Message ID | <f757201a0facd32f2789.1443218910@marginatus.alto.octopoid.net> |
Download | mbox | patch |
Permalink | /patch/10650/ |
State | Superseded |
Commit | 0e0c6b90f55cbfb0ea14287cd3b681bb962ef3be |
Headers | show |
Comments
On Fri, Sep 25, 2015 at 3:08 PM, Pierre-Yves David < pierre-yves.david@ens-lyon.org> wrote: > # HG changeset patch > # User Pierre-Yves David <pierre-yves.david@fb.com> > # Date 1443038172 25200 > # Wed Sep 23 12:56:12 2015 -0700 > # Node ID f757201a0facd32f27896ce6a2dd2210af5e808e > # Parent 7057ea11718a250084a62714a311ad3af9ea5806 > bundle2: allow compressed bundle > > This changesets adds support for a 'compression' parameter in bundle2 > stream. > When set, it control the compression algorithm used for the payload part > of the > bundle2. > > There is currently no usage of this, but in test. > > > + $ hg bundle2 --compress GZ --rev '8+7+5+4' ../rev.hg2.bz > + $ cat ../rev.hg2.bz > + > HG20\x00\x00\x00\x0eCompression=GZx\x9c\x95\x94}h\x95U\x1c\xc7\x9f;1\xe8\xce\xfa\xc3e\xbe\xa0\xa4\xb4R\xb9)\xe7\xf5y\xce\x89\xfac\xed^w\x8b\x9c\xc3?*\x1ch\xcfy\x9b\xddj\xae\xb0(t\xb8\xe5\x96[\xbb\x86a\xa3\x15n:q\xc8j\xe8\xa5\xda\x95d("\xcei\xcd\x06Y4(+Q*X\xc3\x17V*\x9a\x9dg\xdc\xc65\x9e\xc4\x1d\xf8\x9e\x87\xf3\x9c\xf3;\xbf\x0f\xbf\x97\xe38\xce\xf4B\xb9\xd6\xaf\xae\xd2U\xaf\xae{\xad\xc6\xc9\x8d\xbb\x8a\xec\xb4\x07\xed\x7f\xfd\xed\xd3S\xbeN\xf4\x0e\xafYRs\xeaP\xd7\x96\x9e\xba\xd4\x9a\x1f\x87\x9b\x9f\x1d\xe8zjy\xe9\xcb\x7f\xcf\xeb\xfe~\xd3\x82\xce/68!#\xcc6\xb7\xb58\x90\xab\xa1!\x92xZ > (esc) > + \x8a\xb11 (esc) > + H\xa6)\x92J2\xe6\x1b\xe1J\x85\xb9F@F\xedac\xb5\xd6\xaa \x1e\xac^\xb0 > (esc) > + > \xae\x8a\xc4\x03\xc6\xd6\xf9\xa3{\xeb\xfbN\xde\x7f\xe4\x97U_\x15v\x96\xd2]\xbf\x9d?8\x18)L\x0f\xb7]n\x9b\xb3\xaa~\xc6\xd5\x15[\xf7|R\xf1|s\x18c\x98m>#QZj.\x19r\x8d\xcb > > \x07\x14x\x823\xe9b\x86}\x0c\x00\x17\x88S\x86=u\x0bc\xe2\x16\xc6\x84\x9dv\x8fvz\xcb\xde\xfc\xa8\xa3\xf0F\xd3\xa5\xf6\xc7\x96\xb6\x9f`;W\xae(\xce\xb2\x8d\xe9\xf4>ofS\xdd\xe5k\xadg\xbe\xf9r\xee_\x8da<a\xb6\xf9\x8c\xd8\xa5\x82cE=\xa3\x0ca\x90h$(\x87P\xb9\xc2\x97\xc6 > \x01\x11\x80\x84\x10\x98\xcf\xe8\xe4\x13\x96\x05Q,8\xf3\xc4\xec\xeaC\xe7\x96^j\xc8\xbe\x11\xdd2x\xa2\xfa\xdd\x8f\xb3a\x84aQ\x0c\xb3\xcd'dBk\xc2\xb4\x92\x1e\x86\x8c\x12h$\x00\x10\xdb\x7fP\x00\xc6\x91\xe7\xfaL""\xcc\xbf\x84\x81 > (esc) > + > \x92\xc1\xaa*\xc7\x1bI\xe6\xeek\xa9~\xe0\xe9\xb2\x91^|sh\xe0\xfc#?4\xed\xcf\x0e\xf2\xb3\xd3L\xd7\xaeY3o\x8c=\xb8c!+\xe8=\xe0o\x9d:\xb7\xf9\xdc$*\xb2>\xa7X\xdc\x91\xd8@ > \xe9#\x8e\x88\x84\xae\x0f\xb9\x00.\xb5t6\xf3@S@4\x15\xc0\xd7\x12\x8d\xe7\xbbe\xf9\xc8\xef\x03\x0f\xff\xf9\xfe\xb6\x8a\r > (no-eol) (esc) > + > m\xfd\xecQp\xf7\xa7\xad\x9bk\x9d\xdat{SC\xd1Cc\xfd\x19\xf9\xcag\x95\xe5\xef\xc4\xe6l\x9eD\xe1\xc5\xacz\x82o\xc2\xe1\xd2\xb5-\x81)\xf0] > > lo\x10\xae\x88\xcf%\x05\xd0\x93\x06x\x80`C-\x10\x1bGq+\xb7\x7f\xbb\xe9\xa7\xe4}g{\xdf\x9b\xf7b\xcf\xcd\xd8\xf4H\xbcdQWC\xff\xea\x8b\x0b\xaetdS\x07\x86\xfaf<^\xf7\xe1\xaf\xa7\xc2\x90\xff\xa7\xbe\x9e\xc9)\xb6\xccAH\x18i\x94\x8b|\x04}\x8c\x98\xa7\x95PD\xd9\xd0 > \xc8\x140\x14Q\xadl\x16\x03\x94\x0fZF\x93\x7f\x1c\x87\x8d%\xd7\x9d\xa2\xd1\x92L\xf3\xc2T\xba\xf8p\x18\xca$ > (esc) > + )\x96Cq\xf2\x93\x95t\x18\xb5e\xc4\xb8\xf6l\\4 > \x1e\xd5\x0c!\xc0\xb1\x90\x9e\x12@\xb9\x18\xfaZ\x00A\xa29\xd3\xa9\xc1s!\x8e^<\xb9\xb8\xf8HjvF\xa7\x1a\xb6\xdd[Q^\x19\x1dY\x12\xc62\x89\x02\x9a\xc0\x8fO\xb8 > (esc) > + > \xba^\xecX7D\xa3/\xdd3\xed\xc9\xd3\xdd\xc7"\x1b/\xd4\x94\x8e\x95?w\xa7\xaen\xf32\x8d\xbbJL\xb8 > (esc) > + > ZC4:\xb3:\xd6w\xff\\\xb6\xfa\xad\xf9\xdb\xfbj3\xdf\xc1}\x99\xcf\xef\xd4\xd5m\xdaw|;\x19\xfd\xaf\xc5?\xf1`\xc3\x17 > (no-eol) (esc) > + $ hg debugbundle ../rev.hg2.bz > + Stream params: {'Compression': 'GZ'} > + changegroup -- '{}' > + 32af7686d403cf45b5d95f2d70cebea587ac806a > + 9520eea781bcca16c1e15acc0ba14335a0e8e5ba > + eea13746799a9e0bfd88f29d3c2e9dc9389f524f > + 02de42196ebee42ef284b6780a87cdc96e8eaab6 > + $ hg unbundle ../rev.hg2.bz > + adding changesets > + adding manifests > + adding file changes > + added 0 changesets with 0 changes to 3 files > +Simple case where it just work: BZ > +---------------------------------- > + > + $ hg bundle2 --compress BZ --rev '8+7+5+4' ../rev.hg2.bz > + $ cat ../rev.hg2.bz > + > HG20\x00\x00\x00\x0eCompression=BZBZh91AY&SY\xa3K\x18=\x00\x00\x1a\x7f\xff\xff\xbf_\xf6\xef\xef\x7f\xf6?\xf7\xd1\xd9\xff\xff\xf7n\xff\xffn\xf7\xf6\xbd\xdf\xb5\xab\xff\xcfg\xf6\xe7{\xf7\xc0\x02\xd73\x82\x8bQ\x04\xa5S\xd5='\xa0\x99\x18M\r > (no-eol) (esc) > + > 4\x00\xd1\xa1\xe8\x80\xc8z\x87\xa9\xa3Cj=F\x86&\x804=@\xc8\xc9\xb54\xf4\x8fH\x0fQ\xea44\xfdM\xaa\x19\x03@ > \x0c\x08\xda\x86C\xd4\xf5\x0fB\x1e\xa0\xf3T3T\xd3\x13M\x03@2\x00\x002\x03&\x80\r > (no-eol) (esc) > + \x00\r (no-eol) (esc) > + \x00h\xc8\xc8\x03 20\x98\x8c\x80\x00\x00\x03M\x00\xc8\x00\x00\r > (no-eol) (esc) > + > \x00\x00"\x99\xa14\xc2d\xa6\xd54\x1a\x00\x00\x06\x86\x83M\x07\xa8\xd1\xa0h\x01\xa0\x00\x00\x00\x00\r > (no-eol) (esc) > + \x06\x80\x00\x00\x00\r (no-eol) (esc) > + \x00\x03@\x00\x00\x04\xa4\xa1M\xa9\x89\x89\xb4\x9a2\x0cCF\x86\x87\xa9\x8dA\x9a\x98F\x9a\r > (no-eol) (esc) > + 12\x1a4\r (no-eol) (esc) > + \x0c\x8d\xa2\x0c\x98M\x06\x8c@\xc2`\x8d\r (no-eol) (esc) > + \x0c > \xc9\x89\xfa\xa0\xd0\xd3!\xa1\xea4\xd3h\x9e\xa6\xd1t\x053\xcbf\x96\x93(d@ > \x91"\xacU\x9b\xea@{8\x94\xe2\xf8\x06\x00\xcb(\x02\x00M\xab@$\x10C\x18\xcfd\xb4\x06\x83\x0c4l\xb4\xa3\xd4 > (esc) > + > + \xe4\xa8\\N#\xc0\xc9z1\x97\x87wzd\x88\x80\x8e`\x97 > \x93\x0f\x8e\xeb\xc4b\xa4D\xa3R > \xb2\x99\xa9.\xe1\xd7)JT\xacDz\xbb\xcc\x04=\xe0\xaa\xbdj3^\x9b\xa2W6\xfa\xcbE\xbbm>\xc1\xd9\xd9\xf5\x83i\x8a\xd0\xe0\xe2\xe7\xae\x90U$\xda?\xabx\xc0L\xb4V\xa3\x9e\xa4\xaf\x9cet\x86\xecm\xdcb\xdc3\xca\xc8P\xdd\x9d\x98\x8e\x9eY > \xf3\xf0B\x91J > \xf5u\x8d=\xa5\xa5\x15\xcb\x8d\x10c\xb0\xc2.\xb2\x81\xf7\xc1v\x0eSl\x0eFs\xb5\xaeg\xf9L\x0bEk\xa82*/\xa2T\xa4D\x05 > \xa18\xd1\xa4\xc6 > \xa8+\x08\x99\xa4\x14\xae\x8d\xa3\xe3\xaa4'\xd8D\xca\xc3]!\x8b\x1a\x1e\x97)q+ > JJUU\x94Xe\xb2\xbc\xf3\xa5\x90&6vgzQ\x98\xd6\x8aJ\x99P\xb5\x99\x8f\x94!\x17\xa9\x8b\xf3\xadL3\xd4.@\xc8\x0c;\x90S9\xdbH\x024\x83H\xd6\xb3\x99\x13\xd2Xe\x8eq\xac\xa9\x06\x95\xf2\xc4\x8e\xb4\x08k\xd3\x0c\xae\xd9\x90VqC\xa7\xa2b\x16>Pc\xd3W<-\x9f\x0f4\x05\x08\xd8\xa6KY1Tf:E\x0c\x8a\xc7\x90:\xf0j\x83\x1b\xf5\xca\xfb\x80+P\x06\xfbQ~\xa6\xa4\xd4\x81D\x82!T\x00[\x1a0\x83b\xa3\x18\xb6$\x19\x1eE\xdfM\\\xdb\xa6\xaf[\xac\x90\xfa>\xed\xf9\xecL\xba6\xee\xd8` > \xa7\xc7;\xcb\xd1\x90C}'\x16P]\xad\xf4\x14\x07\x0b\x90\\\xcck\x8d?\xa6\x88\xf447\xa8\xcf\x14c6\x19\xf7>(\xde\x99\xe8\x16\xa4\x9d\r > (no-eol) (esc) > + > @\xa1\xa7$R\x14\xa6rbYZ\xca-\xe5Q\x90x\x88\xd9\xc6\xc7!\xd0\xf7F\xb2\x04FDN > \x9c\x12\xb1\x03N%\xe0\xa9\x0cX[\x1d<\x93 > \x01Q\xde\xa9\x1ci#2F\x14\xb4\x90\xdb\x17\x98\x98P\x03\x90)\xaa@\xb0\x13\xd8C\xd2_\xc5\x9d\xeb\xf3\xf2\xadA\xe8z\xa9\xed\xa1X\x84\xa6B\xbf\xd6\xfc$\x82\xc1 > 2&J\x15\xa6\x1d)\x7f~\xf4=\x07\xbcb\x9a[\xecD=r\x1dA\x8b\\\x80\xde\x0eb\x9a.\xf8\x83\x00\xd5\x07\xa0\x9c\xc6t\x98\x11\xb2^\xa98\x02\x03\xee\xfd\x86\\\xf4\x86\xb3\xae\xda\x05\x94\x01\xc5\xc6\xea\x18\xe6\xba*\xba\xb3\x04\\\x96\x89rc[\x10\x11\xf6g4\x98\xcb\xe4\xc0N\xfa\xe6\x99\x19nP\xe8&\x8d\x0c\x17\xe0\xbe\xef\xe1\x8e\x02o2\x82\xdc&\xf8\xa1\x08\xf3\x8a\r > (no-eol) (esc) > + \xf3\xc4u\x00Hs\xb8\xbe;\r (no-eol) (esc) > + > \x7f\xd0\xfd\xc7x\x96\xec\xe0\x03\x80hM\x8dC\x8c\xd7hX\xf9P\xf0\x18\xcb!X\x1b`\xcd\x1f\x846.\x16\x1f > (esc) > + \xf7N\x8f\xeb\xdf\x01-\xc2y\x0b\xf7$\xea\r (no-eol) (esc) > + > \xe8Y\x86Qn\x1c0\xa3\xad/\xee\x8c\x90\xc8\x84\xd5\xe84\xc1\x95\xb2\xc9\xf6M\x87\x1c}\x19\xd6AXVz\xe0l\xba\x10\xc7\xe8396\x96\xe7\xd2\xf9Y\x9a\x08\x95H8\xe7\x0b\xb7 > (esc) > + > $g\xc49\x8bC\x88W\x9c\x01\xf5a\xb5\xe1'A~\xaf\x83\xfe.\xe4\x8ap\xa1!F\x960z > (no-eol) (esc) > Please use the `f` utility to dump binary files: $ f --size --hexdump ../rev.hg2.bz
On 09/26/2015 11:55 AM, Gregory Szorc wrote: > On Fri, Sep 25, 2015 at 3:08 PM, Pierre-Yves David > <pierre-yves.david@ens-lyon.org <mailto:pierre-yves.david@ens-lyon.org>> > wrote: > > # HG changeset patch > # User Pierre-Yves David <pierre-yves.david@fb.com > <mailto:pierre-yves.david@fb.com>> > # Date 1443038172 25200 > # Wed Sep 23 12:56:12 2015 -0700 > # Node ID f757201a0facd32f27896ce6a2dd2210af5e808e > # Parent 7057ea11718a250084a62714a311ad3af9ea5806 > bundle2: allow compressed bundle > > This changesets adds support for a 'compression' parameter in > bundle2 stream. > When set, it control the compression algorithm used for the payload > part of the > bundle2. > > There is currently no usage of this, but in test. > > > + $ hg bundle2 --compress GZ --rev '8+7+5+4' ../rev.hg2.bz > <http://rev.hg2.bz> > + $ cat ../rev.hg2.bz <http://rev.hg2.bz> > + > HG20\x00\x00\x00\x0eCompression=GZx\x9c\x95\x94}h\x95U\x1c\xc7\x9f;1\xe8\xce\xfa\xc3e\xbe\xa0\xa4\xb4R\xb9)\xe7\xf5y\xce\x89\xfac\xed^w\x8b\x9c\xc3?*\x1ch\xcfy\x9b\xddj\xae\xb0(t\xb8\xe5\x96[\xbb\x86a\xa3\x15n:q\xc8j\xe8\xa5\xda\x95d("\xcei\xcd\x06Y4(+Q*X\xc3\x17V*\x9a\x9dg\xdc\xc65\x9e\xc4\x1d\xf8\x9e\x87\xf3\x9c\xf3;\xbf\x0f\xbf\x97\xe38\xce\xf4B\xb9\xd6\xaf\xae\xd2U\xaf\xae{\xad\xc6\xc9\x8d\xbb\x8a\xec\xb4\x07\xed\x7f\xfd\xed\xd3S\xbeN\xf4\x0e\xafYRs\xeaP\xd7\x96\x9e\xba\xd4\x9a\x1f\x87\x9b\x9f\x1d\xe8zjy\xe9\xcb\x7f\xcf\xeb\xfe~\xd3\x82\xce/68!#\xcc6\xb7\xb58\x90\xab\xa1!\x92xZ > (esc) > + \x8a\xb11 (esc) > + H\xa6)\x92J2\xe6\x1b\xe1J\x85\xb9F@F\xedac\xb5\xd6\xaa > \x1e\xac^\xb0 (esc) > + > \xae\x8a\xc4\x03\xc6\xd6\xf9\xa3{\xeb\xfbN\xde\x7f\xe4\x97U_\x15v\x96\xd2]\xbf\x9d?8\x18)L\x0f\xb7]n\x9b\xb3\xaa~\xc6\xd5\x15[\xf7|R\xf1|s\x18c\x98m>#QZj.\x19r\x8d\xcb > > \x07\x14x\x823\xe9b\x86}\x0c\x00\x17\x88S\x86=u\x0bc\xe2\x16\xc6\x84\x9dv\x8fvz\xcb\xde\xfc\xa8\xa3\xf0F\xd3\xa5\xf6\xc7\x96\xb6\x9f`;W\xae(\xce\xb2\x8d\xe9\xf4>ofS\xdd\xe5k\xadg\xbe\xf9r\xee_\x8da<a\xb6\xf9\x8c\xd8\xa5\x82cE=\xa3\x0ca\x90h$(\x87P\xb9\xc2\x97\xc6 > \x01\x11\x80\x84\x10\x98\xcf\xe8\xe4\x13\x96\x05Q,8\xf3\xc4\xec\xeaC\xe7\x96^j\xc8\xbe\x11\xdd2x\xa2\xfa\xdd\x8f\xb3a\x84aQ\x0c\xb3\xcd'dBk\xc2\xb4\x92\x1e\x86\x8c\x12h$\x00\x10\xdb\x7fP\x00\xc6\x91\xe7\xfaL""\xcc\xbf\x84\x81 > (esc) > + > \x92\xc1\xaa*\xc7\x1bI\xe6\xeek\xa9~\xe0\xe9\xb2\x91^|sh\xe0\xfc#?4\xed\xcf\x0e\xf2\xb3\xd3L\xd7\xaeY3o\x8c=\xb8c!+\xe8=\xe0o\x9d:\xb7\xf9\xdc$*\xb2>\xa7X\xdc\x91\xd8@\xe9#\x8e\x88\x84\xae\x0f\xb9\x00.\xb5t6\xf3@S@4\x15\xc0\xd7\x12\x8d\xe7\xbbe\xf9\xc8\xef\x03\x0f\xff\xf9\xfe\xb6\x8a\r > (no-eol) (esc) > + > m\xfd\xecQp\xf7\xa7\xad\x9bk\x9d\xdat{SC\xd1Cc\xfd\x19\xf9\xcag\x95\xe5\xef\xc4\xe6l\x9eD\xe1\xc5\xacz\x82o\xc2\xe1\xd2\xb5-\x81)\xf0] > > lo\x10\xae\x88\xcf%\x05\xd0\x93\x06x\x80`C-\x10\x1bGq+\xb7\x7f\xbb\xe9\xa7\xe4}g{\xdf\x9b\xf7b\xcf\xcd\xd8\xf4H\xbcdQWC\xff\xea\x8b\x0b\xaetdS\x07\x86\xfaf<^\xf7\xe1\xaf\xa7\xc2\x90\xff\xa7\xbe\x9e\xc9)\xb6\xccAH\x18i\x94\x8b|\x04}\x8c\x98\xa7\x95PD\xd9\xd0 \xc8\x140\x14Q\xadl\x16\x03\x94\x0fZF\x93\x7f\x1c\x87\x8d%\xd7\x9d\xa2\xd1\x92L\xf3\xc2T\xba\xf8p\x18\xca$ (esc) > + )\x96Cq\xf2\x93\x95t\x18\xb5e\xc4\xb8\xf6l\\4 > \x1e\xd5\x0c!\xc0\xb1\x90\x9e\x12@\xb9\x18\xfaZ\x00A\xa29\xd3\xa9\xc1s!\x8e^<\xb9\xb8\xf8HjvF\xa7\x1a\xb6\xdd[Q^\x19\x1dY\x12\xc62\x89\x02\x9a\xc0\x8fO\xb8 > (esc) > + > \xba^\xecX7D\xa3/\xdd3\xed\xc9\xd3\xdd\xc7"\x1b/\xd4\x94\x8e\x95?w\xa7\xaen\xf32\x8d\xbbJL\xb8 > (esc) > + > ZC4:\xb3:\xd6w\xff\\\xb6\xfa\xad\xf9\xdb\xfbj3\xdf\xc1}\x99\xcf\xef\xd4\xd5m\xdaw|;\x19\xfd\xaf\xc5?\xf1`\xc3\x17 > (no-eol) (esc) > + $ hg debugbundle ../rev.hg2.bz <http://rev.hg2.bz> > + Stream params: {'Compression': 'GZ'} > + changegroup -- '{}' > + 32af7686d403cf45b5d95f2d70cebea587ac806a > + 9520eea781bcca16c1e15acc0ba14335a0e8e5ba > + eea13746799a9e0bfd88f29d3c2e9dc9389f524f > + 02de42196ebee42ef284b6780a87cdc96e8eaab6 > + $ hg unbundle ../rev.hg2.bz <http://rev.hg2.bz> > + adding changesets > + adding manifests > + adding file changes > + added 0 changesets with 0 changes to 3 files > +Simple case where it just work: BZ > +---------------------------------- > + > + $ hg bundle2 --compress BZ --rev '8+7+5+4' ../rev.hg2.bz > <http://rev.hg2.bz> > + $ cat ../rev.hg2.bz <http://rev.hg2.bz> > + > HG20\x00\x00\x00\x0eCompression=BZBZh91AY&SY\xa3K\x18=\x00\x00\x1a\x7f\xff\xff\xbf_\xf6\xef\xef\x7f\xf6?\xf7\xd1\xd9\xff\xff\xf7n\xff\xffn\xf7\xf6\xbd\xdf\xb5\xab\xff\xcfg\xf6\xe7{\xf7\xc0\x02\xd73\x82\x8bQ\x04\xa5S\xd5='\xa0\x99\x18M\r > (no-eol) (esc) > + > 4\x00\xd1\xa1\xe8\x80\xc8z\x87\xa9\xa3Cj=F\x86&\x804=@\xc8\xc9\xb54\xf4\x8fH\x0fQ\xea44\xfdM\xaa\x19\x03@\x0c\x08\xda\x86C\xd4\xf5\x0fB\x1e\xa0\xf3T3T\xd3\x13M\x03@2\x00\x002\x03&\x80\r > (no-eol) (esc) > + \x00\r (no-eol) (esc) > + \x00h\xc8\xc8\x03 20\x98\x8c\x80\x00\x00\x03M\x00\xc8\x00\x00\r > (no-eol) (esc) > + > \x00\x00"\x99\xa14\xc2d\xa6\xd54\x1a\x00\x00\x06\x86\x83M\x07\xa8\xd1\xa0h\x01\xa0\x00\x00\x00\x00\r > (no-eol) (esc) > + \x06\x80\x00\x00\x00\r (no-eol) (esc) > + > \x00\x03@\x00\x00\x04\xa4\xa1M\xa9\x89\x89\xb4\x9a2\x0cCF\x86\x87\xa9\x8dA\x9a\x98F\x9a\r > (no-eol) (esc) > + 12\x1a4\r (no-eol) (esc) > + \x0c\x8d\xa2\x0c\x98M\x06\x8c@\xc2`\x8d\r (no-eol) (esc) > + \x0c > \xc9\x89\xfa\xa0\xd0\xd3!\xa1\xea4\xd3h\x9e\xa6\xd1t\x053\xcbf\x96\x93(d@\x91"\xacU\x9b\xea@{8\x94\xe2\xf8\x06\x00\xcb(\x02\x00M\xab@$\x10C\x18\xcfd\xb4\x06\x83\x0c4l\xb4\xa3\xd4 > (esc) > + > + \xe4\xa8\\N#\xc0\xc9z1\x97\x87wzd\x88\x80\x8e`\x97 > \x93\x0f\x8e\xeb\xc4b\xa4D\xa3R > \xb2\x99\xa9.\xe1\xd7)JT\xacDz\xbb\xcc\x04=\xe0\xaa\xbdj3^\x9b\xa2W6\xfa\xcbE\xbbm>\xc1\xd9\xd9\xf5\x83i\x8a\xd0\xe0\xe2\xe7\xae\x90U$\xda?\xabx\xc0L\xb4V\xa3\x9e\xa4\xaf\x9cet\x86\xecm\xdcb\xdc3\xca\xc8P\xdd\x9d\x98\x8e\x9eY > \xf3\xf0B\x91J > \xf5u\x8d=\xa5\xa5\x15\xcb\x8d\x10c\xb0\xc2.\xb2\x81\xf7\xc1v\x0eSl\x0eFs\xb5\xaeg\xf9L\x0bEk\xa82*/\xa2T\xa4D\x05 > \xa18\xd1\xa4\xc6 > \xa8+\x08\x99\xa4\x14\xae\x8d\xa3\xe3\xaa4'\xd8D\xca\xc3]!\x8b\x1a\x1e\x97)q+ > JJUU\x94Xe\xb2\xbc\xf3\xa5\x90&6vgzQ\x98\xd6\x8aJ\x99P\xb5\x99\x8f\x94!\x17\xa9\x8b\xf3\xadL3\xd4.@\xc8\x0c;\x90S9\xdbH\x024\x83H\xd6\xb3\x99\x13\xd2Xe\x8eq\xac\xa9\x06\x95\xf2\xc4\x8e\xb4\x08k\xd3\x0c\xae\xd9\x90VqC\xa7\xa2b\x16>Pc\xd3W<-\x9f\x0f4\x05\x08\xd8\xa6KY1Tf:E\x0c\x8a\xc7\x90:\xf0j\x83\x1b\xf5\xca\xfb\x80+P\x06\xfbQ~\xa6\xa4\xd4\x81D\x82!T\x00[\x1a0\x83b\xa3\x18\xb6$\x19\x1eE\xdfM\\\xdb\xa6\xaf[\xac\x90\xfa>\xed\xf9\xecL\xba6\xee\xd8` \xa7\xc7;\xcb\xd1\x90C}'\x16P]\xad\xf4\x14\x07\x0b\x90\\\xcck\x8d?\xa6\x88\xf447\xa8\xcf\x14c6\x19\xf7>(\xde\x99\xe8\x16\xa4\x9d\r (no-eol) (esc) > + > @\xa1\xa7$R\x14\xa6rbYZ\xca-\xe5Q\x90x\x88\xd9\xc6\xc7!\xd0\xf7F\xb2\x04FDN > \x9c\x12\xb1\x03N%\xe0\xa9\x0cX[\x1d<\x93 > \x01Q\xde\xa9\x1ci#2F\x14\xb4\x90\xdb\x17\x98\x98P\x03\x90)\xaa@\xb0\x13\xd8C\xd2_\xc5\x9d\xeb\xf3\xf2\xadA\xe8z\xa9\xed\xa1X\x84\xa6B\xbf\xd6\xfc$\x82\xc1 > 2&J\x15\xa6\x1d)\x7f~\xf4=\x07\xbcb\x9a[\xecD=r\x1dA\x8b\\\x80\xde\x0eb\x9a.\xf8\x83\x00\xd5\x07\xa0\x9c\xc6t\x98\x11\xb2^\xa98\x02\x03\xee\xfd\x86\\\xf4\x86\xb3\xae\xda\x05\x94\x01\xc5\xc6\xea\x18\xe6\xba*\xba\xb3\x04\\\x96\x89rc[\x10\x11\xf6g4\x98\xcb\xe4\xc0N\xfa\xe6\x99\x19nP\xe8&\x8d\x0c\x17\xe0\xbe\xef\xe1\x8e\x02o2\x82\xdc&\xf8\xa1\x08\xf3\x8a\r > (no-eol) (esc) > + \xf3\xc4u\x00Hs\xb8\xbe;\r (no-eol) (esc) > + > \x7f\xd0\xfd\xc7x\x96\xec\xe0\x03\x80hM\x8dC\x8c\xd7hX\xf9P\xf0\x18\xcb!X\x1b`\xcd\x1f\x846.\x16\x1f > (esc) > + \xf7N\x8f\xeb\xdf\x01-\xc2y\x0b\xf7$\xea\r (no-eol) (esc) > + > \xe8Y\x86Qn\x1c0\xa3\xad/\xee\x8c\x90\xc8\x84\xd5\xe84\xc1\x95\xb2\xc9\xf6M\x87\x1c}\x19\xd6AXVz\xe0l\xba\x10\xc7\xe8396\x96\xe7\xd2\xf9Y\x9a\x08\x95H8\xe7\x0b\xb7 > (esc) > + > $g\xc49\x8bC\x88W\x9c\x01\xf5a\xb5\xe1'A~\xaf\x83\xfe.\xe4\x8ap\xa1!F\x960z > (no-eol) (esc) > > > Please use the `f` utility to dump binary files: > > $ f --size --hexdump ../rev.hg2.bz <http://rev.hg2.bz> Excellent. I'll send a V3 for this once 1-5 are queued.
Patch
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -477,10 +477,19 @@ class bundle20(object): def __init__(self, ui, capabilities=()): self.ui = ui self._params = [] self._parts = [] self.capabilities = dict(capabilities) + self._compressor = util.compressors[None]() + + def setcompression(self, alg): + """setup core part compression to <alg>""" + if alg is None: + return + assert not any(n.lower() == 'Compression' for n, v in self._params) + self.addparam('Compression', alg) + self._compressor = util.compressors[alg]() @property def nbparts(self): """total number of parts added to the bundler""" return len(self._parts) @@ -528,12 +537,14 @@ class bundle20(object): param = self._paramchunk() outdebug(self.ui, 'bundle parameter: %s' % param) yield _pack(_fstreamparamsize, len(param)) if param: yield param + # starting compression for chunk in self._getcorechunk(): - yield chunk + yield self._compressor.compress(chunk) + yield self._compressor.flush() def _paramchunk(self): """return a encoded version of all stream parameters""" blocks = [] for par, value in self._params: @@ -631,10 +642,11 @@ class unbundle20(unpackermixin): `iterparts` methods.""" def __init__(self, ui, fp): """If header is specified, we do not read it out of the stream.""" self.ui = ui + self._decompressor = util.decompressors[None] super(unbundle20, self).__init__(fp) @util.propertycache def params(self): """dictionary of stream level parameters""" @@ -680,10 +692,12 @@ class unbundle20(unpackermixin): def iterparts(self): """yield all parts contained in the stream""" # make sure param have been loaded self.params + # From there, payload need to be decompressed + self._fp = self._decompressor(self._fp) indebug(self.ui, 'start extraction of bundle2 parts') headerblock = self._readpartheader() while headerblock is not None: part = unbundlepart(self.ui, headerblock, self._fp) yield part @@ -717,10 +731,18 @@ def b2streamparamhandler(name): assert name not in formatmap b2streamparamsmap[name] = func return func return decorator +@b2streamparamhandler('compression') +def processcompression(unbundler, param, value): + """read compression parameter and install payload decompression""" + if value not in util.decompressors: + raise error.BundleUnknownFeatureError(params=(param,), + values=(value,)) + unbundler._decompressor = util.decompressors[value] + class bundlepart(object): """A bundle2 part contains application level payload The part `type` is used to route the part to the application level handler. diff --git a/tests/test-bundle2-format.t b/tests/test-bundle2-format.t --- a/tests/test-bundle2-format.t +++ b/tests/test-bundle2-format.t @@ -77,11 +77,12 @@ Create an extension to test bundle2 API > ('', 'parts', False, 'include some arbitrary parts to the bundle'), > ('', 'reply', False, 'produce a reply bundle'), > ('', 'pushrace', False, 'includes a check:head part with unknown nodes'), > ('', 'genraise', False, 'includes a part that raise an exception during generation'), > ('', 'timeout', False, 'emulate a timeout during bundle generation'), - > ('r', 'rev', [], 'includes those changeset in the bundle'),], + > ('r', 'rev', [], 'includes those changeset in the bundle'), + > ('', 'compress', '', 'compress the stream'),], > '[OUTPUTFILE]') > def cmdbundle2(ui, repo, path=None, **opts): > """write a bundle2 container on standard output""" > bundler = bundle2.bundle20(ui) > for p in opts['param']: @@ -89,10 +90,13 @@ Create an extension to test bundle2 API > try: > bundler.addparam(*p) > except ValueError, exc: > raise util.Abort('%s' % exc) > + > if opts['compress']: + > bundler.setcompression(opts['compress']) + > > if opts['reply']: > capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville' > bundler.newpart('replycaps', data=capsstring) > > if opts['pushrace']: @@ -881,7 +885,79 @@ And its handling on the other size raise $ cat ../genfailed.hg2 | hg unbundle2 0 unread bytes abort: unexpected error: Someone set up us the bomb! [255] +Test compression +================ + +Simple case where it just work: GZ +---------------------------------- + + $ hg bundle2 --compress GZ --rev '8+7+5+4' ../rev.hg2.bz + $ cat ../rev.hg2.bz + HG20\x00\x00\x00\x0eCompression=GZx\x9c\x95\x94}h\x95U\x1c\xc7\x9f;1\xe8\xce\xfa\xc3e\xbe\xa0\xa4\xb4R\xb9)\xe7\xf5y\xce\x89\xfac\xed^w\x8b\x9c\xc3?*\x1ch\xcfy\x9b\xddj\xae\xb0(t\xb8\xe5\x96[\xbb\x86a\xa3\x15n:q\xc8j\xe8\xa5\xda\x95d("\xcei\xcd\x06Y4(+Q*X\xc3\x17V*\x9a\x9dg\xdc\xc65\x9e\xc4\x1d\xf8\x9e\x87\xf3\x9c\xf3;\xbf\x0f\xbf\x97\xe38\xce\xf4B\xb9\xd6\xaf\xae\xd2U\xaf\xae{\xad\xc6\xc9\x8d\xbb\x8a\xec\xb4\x07\xed\x7f\xfd\xed\xd3S\xbeN\xf4\x0e\xafYRs\xeaP\xd7\x96\x9e\xba\xd4\x9a\x1f\x87\x9b\x9f\x1d\xe8zjy\xe9\xcb\x7f\xcf\xeb\xfe~\xd3\x82\xce/68!#\xcc6\xb7\xb58\x90\xab\xa1!\x92xZ (esc) + \x8a\xb11 (esc) + H\xa6)\x92J2\xe6\x1b\xe1J\x85\xb9F@F\xedac\xb5\xd6\xaa \x1e\xac^\xb0 (esc) + \xae\x8a\xc4\x03\xc6\xd6\xf9\xa3{\xeb\xfbN\xde\x7f\xe4\x97U_\x15v\x96\xd2]\xbf\x9d?8\x18)L\x0f\xb7]n\x9b\xb3\xaa~\xc6\xd5\x15[\xf7|R\xf1|s\x18c\x98m>#QZj.\x19r\x8d\xcb \x07\x14x\x823\xe9b\x86}\x0c\x00\x17\x88S\x86=u\x0bc\xe2\x16\xc6\x84\x9dv\x8fvz\xcb\xde\xfc\xa8\xa3\xf0F\xd3\xa5\xf6\xc7\x96\xb6\x9f`;W\xae(\xce\xb2\x8d\xe9\xf4>ofS\xdd\xe5k\xadg\xbe\xf9r\xee_\x8da<a\xb6\xf9\x8c\xd8\xa5\x82cE=\xa3\x0ca\x90h$(\x87P\xb9\xc2\x97\xc6 \x01\x11\x80\x84\x10\x98\xcf\xe8\xe4\x13\x96\x05Q,8\xf3\xc4\xec\xeaC\xe7\x96^j\xc8\xbe\x11\xdd2x\xa2\xfa\xdd\x8f\xb3a\x84aQ\x0c\xb3\xcd'dBk\xc2\xb4\x92\x1e\x86\x8c\x12h$\x00\x10\xdb\x7fP\x00\xc6\x91\xe7\xfaL""\xcc\xbf\x84\x81 (esc) + \x92\xc1\xaa*\xc7\x1bI\xe6\xeek\xa9~\xe0\xe9\xb2\x91^|sh\xe0\xfc#?4\xed\xcf\x0e\xf2\xb3\xd3L\xd7\xaeY3o\x8c=\xb8c!+\xe8=\xe0o\x9d:\xb7\xf9\xdc$*\xb2>\xa7X\xdc\x91\xd8@\xe9#\x8e\x88\x84\xae\x0f\xb9\x00.\xb5t6\xf3@S@4\x15\xc0\xd7\x12\x8d\xe7\xbbe\xf9\xc8\xef\x03\x0f\xff\xf9\xfe\xb6\x8a\r (no-eol) (esc) + m\xfd\xecQp\xf7\xa7\xad\x9bk\x9d\xdat{SC\xd1Cc\xfd\x19\xf9\xcag\x95\xe5\xef\xc4\xe6l\x9eD\xe1\xc5\xacz\x82o\xc2\xe1\xd2\xb5-\x81)\xf0] lo\x10\xae\x88\xcf%\x05\xd0\x93\x06x\x80`C-\x10\x1bGq+\xb7\x7f\xbb\xe9\xa7\xe4}g{\xdf\x9b\xf7b\xcf\xcd\xd8\xf4H\xbcdQWC\xff\xea\x8b\x0b\xaetdS\x07\x86\xfaf<^\xf7\xe1\xaf\xa7\xc2\x90\xff\xa7\xbe\x9e\xc9)\xb6\xccAH\x18i\x94\x8b|\x04}\x8c\x98\xa7\x95PD\xd9\xd0 \xc8\x140\x14Q\xadl\x16\x03\x94\x0fZF\x93\x7f\x1c\x87\x8d%\xd7\x9d\xa2\xd1\x92L\xf3\xc2T\xba\xf8p\x18\xca$ (esc) + )\x96Cq\xf2\x93\x95t\x18\xb5e\xc4\xb8\xf6l\\4 \x1e\xd5\x0c!\xc0\xb1\x90\x9e\x12@\xb9\x18\xfaZ\x00A\xa29\xd3\xa9\xc1s!\x8e^<\xb9\xb8\xf8HjvF\xa7\x1a\xb6\xdd[Q^\x19\x1dY\x12\xc62\x89\x02\x9a\xc0\x8fO\xb8 (esc) + \xba^\xecX7D\xa3/\xdd3\xed\xc9\xd3\xdd\xc7"\x1b/\xd4\x94\x8e\x95?w\xa7\xaen\xf32\x8d\xbbJL\xb8 (esc) + ZC4:\xb3:\xd6w\xff\\\xb6\xfa\xad\xf9\xdb\xfbj3\xdf\xc1}\x99\xcf\xef\xd4\xd5m\xdaw|;\x19\xfd\xaf\xc5?\xf1`\xc3\x17 (no-eol) (esc) + $ hg debugbundle ../rev.hg2.bz + Stream params: {'Compression': 'GZ'} + changegroup -- '{}' + 32af7686d403cf45b5d95f2d70cebea587ac806a + 9520eea781bcca16c1e15acc0ba14335a0e8e5ba + eea13746799a9e0bfd88f29d3c2e9dc9389f524f + 02de42196ebee42ef284b6780a87cdc96e8eaab6 + $ hg unbundle ../rev.hg2.bz + adding changesets + adding manifests + adding file changes + added 0 changesets with 0 changes to 3 files +Simple case where it just work: BZ +---------------------------------- + + $ hg bundle2 --compress BZ --rev '8+7+5+4' ../rev.hg2.bz + $ cat ../rev.hg2.bz + HG20\x00\x00\x00\x0eCompression=BZBZh91AY&SY\xa3K\x18=\x00\x00\x1a\x7f\xff\xff\xbf_\xf6\xef\xef\x7f\xf6?\xf7\xd1\xd9\xff\xff\xf7n\xff\xffn\xf7\xf6\xbd\xdf\xb5\xab\xff\xcfg\xf6\xe7{\xf7\xc0\x02\xd73\x82\x8bQ\x04\xa5S\xd5='\xa0\x99\x18M\r (no-eol) (esc) + 4\x00\xd1\xa1\xe8\x80\xc8z\x87\xa9\xa3Cj=F\x86&\x804=@\xc8\xc9\xb54\xf4\x8fH\x0fQ\xea44\xfdM\xaa\x19\x03@\x0c\x08\xda\x86C\xd4\xf5\x0fB\x1e\xa0\xf3T3T\xd3\x13M\x03@2\x00\x002\x03&\x80\r (no-eol) (esc) + \x00\r (no-eol) (esc) + \x00h\xc8\xc8\x03 20\x98\x8c\x80\x00\x00\x03M\x00\xc8\x00\x00\r (no-eol) (esc) + \x00\x00"\x99\xa14\xc2d\xa6\xd54\x1a\x00\x00\x06\x86\x83M\x07\xa8\xd1\xa0h\x01\xa0\x00\x00\x00\x00\r (no-eol) (esc) + \x06\x80\x00\x00\x00\r (no-eol) (esc) + \x00\x03@\x00\x00\x04\xa4\xa1M\xa9\x89\x89\xb4\x9a2\x0cCF\x86\x87\xa9\x8dA\x9a\x98F\x9a\r (no-eol) (esc) + 12\x1a4\r (no-eol) (esc) + \x0c\x8d\xa2\x0c\x98M\x06\x8c@\xc2`\x8d\r (no-eol) (esc) + \x0c \xc9\x89\xfa\xa0\xd0\xd3!\xa1\xea4\xd3h\x9e\xa6\xd1t\x053\xcbf\x96\x93(d@\x91"\xacU\x9b\xea@{8\x94\xe2\xf8\x06\x00\xcb(\x02\x00M\xab@$\x10C\x18\xcfd\xb4\x06\x83\x0c4l\xb4\xa3\xd4 (esc) + + \xe4\xa8\\N#\xc0\xc9z1\x97\x87wzd\x88\x80\x8e`\x97 \x93\x0f\x8e\xeb\xc4b\xa4D\xa3R \xb2\x99\xa9.\xe1\xd7)JT\xacDz\xbb\xcc\x04=\xe0\xaa\xbdj3^\x9b\xa2W6\xfa\xcbE\xbbm>\xc1\xd9\xd9\xf5\x83i\x8a\xd0\xe0\xe2\xe7\xae\x90U$\xda?\xabx\xc0L\xb4V\xa3\x9e\xa4\xaf\x9cet\x86\xecm\xdcb\xdc3\xca\xc8P\xdd\x9d\x98\x8e\x9eY \xf3\xf0B\x91J \xf5u\x8d=\xa5\xa5\x15\xcb\x8d\x10c\xb0\xc2.\xb2\x81\xf7\xc1v\x0eSl\x0eFs\xb5\xaeg\xf9L\x0bEk\xa82*/\xa2T\xa4D\x05 \xa18\xd1\xa4\xc6 \xa8+\x08\x99\xa4\x14\xae\x8d\xa3\xe3\xaa4'\xd8D\xca\xc3]!\x8b\x1a\x1e\x97)q+ JJUU\x94Xe\xb2\xbc\xf3\xa5\x90&6vgzQ\x98\xd6\x8aJ\x99P\xb5\x99\x8f\x94!\x17\xa9\x8b\xf3\xadL3\xd4.@\xc8\x0c;\x90S9\xdbH\x024\x83H\xd6\xb3\x99\x13\xd2Xe\x8eq\xac\xa9\x06\x95\xf2\xc4\x8e\xb4\x08k\xd3\x0c\xae\xd9\x90VqC\xa7\xa2b\x16>Pc\xd3W<-\x9f\x0f4\x05\x08\xd8\xa6KY1Tf:E\x0c\x8a\xc7\x90:\xf0j\x83\x1b\xf5\xca\xfb\x80+P\x06\xfbQ~\xa6\xa4\xd4\x81D\x82!T\x00[\x1a0\x83b\xa3\x18\xb6$\x19\x1eE\xdfM\\\xdb\xa6\xaf[\xac\x90\xfa>\xed\xf9\xecL\xba6\xee\xd8` \xa7\xc7;\xcb\xd1\x90C}'\x16P]\xad\xf4\x14\x07\x0b\x90\\\xcck\x8d?\xa6\x88\xf447\xa8\xcf\x14c6\x19\xf7>(\xde\x99\xe8\x16\xa4\x9d\r (no-eol) (esc) + @\xa1\xa7$R\x14\xa6rbYZ\xca-\xe5Q\x90x\x88\xd9\xc6\xc7!\xd0\xf7F\xb2\x04FDN \x9c\x12\xb1\x03N%\xe0\xa9\x0cX[\x1d<\x93 \x01Q\xde\xa9\x1ci#2F\x14\xb4\x90\xdb\x17\x98\x98P\x03\x90)\xaa@\xb0\x13\xd8C\xd2_\xc5\x9d\xeb\xf3\xf2\xadA\xe8z\xa9\xed\xa1X\x84\xa6B\xbf\xd6\xfc$\x82\xc1 2&J\x15\xa6\x1d)\x7f~\xf4=\x07\xbcb\x9a[\xecD=r\x1dA\x8b\\\x80\xde\x0eb\x9a.\xf8\x83\x00\xd5\x07\xa0\x9c\xc6t\x98\x11\xb2^\xa98\x02\x03\xee\xfd\x86\\\xf4\x86\xb3\xae\xda\x05\x94\x01\xc5\xc6\xea\x18\xe6\xba*\xba\xb3\x04\\\x96\x89rc[\x10\x11\xf6g4\x98\xcb\xe4\xc0N\xfa\xe6\x99\x19nP\xe8&\x8d\x0c\x17\xe0\xbe\xef\xe1\x8e\x02o2\x82\xdc&\xf8\xa1\x08\xf3\x8a\r (no-eol) (esc) + \xf3\xc4u\x00Hs\xb8\xbe;\r (no-eol) (esc) + \x7f\xd0\xfd\xc7x\x96\xec\xe0\x03\x80hM\x8dC\x8c\xd7hX\xf9P\xf0\x18\xcb!X\x1b`\xcd\x1f\x846.\x16\x1f (esc) + \xf7N\x8f\xeb\xdf\x01-\xc2y\x0b\xf7$\xea\r (no-eol) (esc) + \xe8Y\x86Qn\x1c0\xa3\xad/\xee\x8c\x90\xc8\x84\xd5\xe84\xc1\x95\xb2\xc9\xf6M\x87\x1c}\x19\xd6AXVz\xe0l\xba\x10\xc7\xe8396\x96\xe7\xd2\xf9Y\x9a\x08\x95H8\xe7\x0b\xb7 (esc) + $g\xc49\x8bC\x88W\x9c\x01\xf5a\xb5\xe1'A~\xaf\x83\xfe.\xe4\x8ap\xa1!F\x960z (no-eol) (esc) + $ hg debugbundle ../rev.hg2.bz + Stream params: {'Compression': 'BZ'} + changegroup -- '{}' + 32af7686d403cf45b5d95f2d70cebea587ac806a + 9520eea781bcca16c1e15acc0ba14335a0e8e5ba + eea13746799a9e0bfd88f29d3c2e9dc9389f524f + 02de42196ebee42ef284b6780a87cdc96e8eaab6 + $ hg unbundle ../rev.hg2.bz + adding changesets + adding manifests + adding file changes + added 0 changesets with 0 changes to 3 files + +unknown compression while unbundling +----------------------------- + + $ hg bundle2 --param Compression=FooBarUnknown --rev '8+7+5+4' ../rev.hg2.bz + $ cat ../rev.hg2.bz | hg statbundle2 + abort: unknown parameters: Stream Parameter - Compression='FooBarUnknown' + [255] $ cd ..