diff -r 8253e55930a3 -r 9c5183cb9bca mercurial/bundle2.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/bundle2.py Tue Mar 18 14:00:50 2014 -0700 @@ -0,0 +1,84 @@ +# bundle2.py - generic container format to transmit arbitrary data. +# +# Copyright 2013 Facebook, Inc. +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. +"""Handling of the new bundle2 format + +The goal of bundle2 is to act as an atomically packet to transmit a set of +payloads in an application agnostic way. It consist in a sequence of "parts" +that will be handed to and processed by the application layer. + + +General format architecture +=========================== + +The format is architectured as follow + + - magic string + - stream level parameters + - payload parts (any number) + - end of stream marker. + +The current implementation is limited to empty bundle. + +Details on the Binary format +============================ + +All numbers are unsigned and big endian. + +stream level parameters +------------------------ + +Binary format is as follow + +:params size: (16 bits integer) + + The total number of Bytes used by the parameters + + Currently force to 0. + +:params value: arbitrary number of Bytes + + A blob of `params size` containing the serialized version of all stream level + parameters. + + Currently always empty. + + +Payload part +------------------------ + +Binary format is as follow + +:header size: (16 bits inter) + + The total number of Bytes used by the part headers. When the header is empty + (size = 0) this is interpreted as the end of stream marker. + + Currently forced to 0 in the current state of the implementation +""" + +_magicstring = 'HG20' + +class bundle20(object): + """represent an outgoing bundle2 container + + People will eventually be able to add param and parts to this object and + generated a stream from it.""" + + def __init__(self): + self._params = [] + self._parts = [] + + def getchunks(self): + yield _magicstring + # no support for any param yet + # to be obviously fixed soon. + assert not self._params + yield '\0\0' + # no support for parts + # to be obviously fixed soon. + assert not self._parts + yield '\0\0'