comparison mercurial/debugcommands.py @ 37290:cc5a040fe150

wireproto: syntax for encoding CBOR into frames We just vendored a library for encoding and decoding the CBOR data format. While the intent of that vendor was to support state files, CBOR is really a nice data format. It is extensible and compact. I've been feeling dirty inventing my own data formats for frame payloads. While custom formats can always beat out a generic format, there is a cost to be paid in terms of implementation, comprehension, etc. CBOR is compact enough that I'm not too worried about efficiency loss. I think the benefits of using a standardized format outweigh rolling our own formats. So I plan to make heavy use of CBOR in the wire protocol going forward. This commit introduces support for encoding CBOR data in frame payloads to our function to make a frame from a human string. We do need to employ some low-level Python code in order to evaluate a string as a Python expression. But other than that, this should hopefully be pretty straightforward. Unit tests for this function have been added. Differential Revision: https://phab.mercurial-scm.org/D2948
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 28 Mar 2018 15:05:39 -0700
parents 9bfcbe4f4745
children 2f859ad7ed8c
comparison
equal deleted inserted replaced
37289:5fadc63ac99f 37290:cc5a040fe150
2791 ``stream-flags`` and ``flags`` are a ``|`` delimited list of flag 2791 ``stream-flags`` and ``flags`` are a ``|`` delimited list of flag
2792 components. Each component (and there can be just one) can be an integer 2792 components. Each component (and there can be just one) can be an integer
2793 or a flag name for stream flags or frame flags, respectively. Values are 2793 or a flag name for stream flags or frame flags, respectively. Values are
2794 resolved to integers and then bitwise OR'd together. 2794 resolved to integers and then bitwise OR'd together.
2795 2795
2796 ``payload`` is is evaluated as a Python byte string literal. 2796 ``payload`` represents the raw frame payload. If it begins with
2797 ``cbor:``, the following string is evaluated as Python code and the
2798 resulting object is fed into a CBOR encoder. Otherwise it is interpreted
2799 as a Python byte string literal.
2797 """ 2800 """
2798 opts = pycompat.byteskwargs(opts) 2801 opts = pycompat.byteskwargs(opts)
2799 2802
2800 if opts['localssh'] and not repo: 2803 if opts['localssh'] and not repo:
2801 raise error.Abort(_('--localssh requires a repository')) 2804 raise error.Abort(_('--localssh requires a repository'))