Mercurial > hg
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')) |