Mercurial > hg-stable
changeset 22612:fdfa40ee75cf
obsolete: gather all contents related to format version 0 in a single place
All contents includes documentation, constants, and functions, so we
gather all of those things into a single location. The diff is confusing
because it cannot understand what code is semantically moved around in this
grand migration.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 12 Sep 2014 14:41:43 +0200 |
parents | 2ff28e07d7d6 |
children | e623898b80f5 |
files | mercurial/obsolete.py |
diffstat | 1 files changed, 47 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/obsolete.py Sun Aug 31 13:01:00 2014 +0200 +++ b/mercurial/obsolete.py Fri Sep 12 14:41:43 2014 +0200 @@ -63,25 +63,8 @@ - 1 unsigned byte: version number, starting at zero. - -The header is followed by the markers. Each marker is made of: - -- 1 unsigned byte: number of new changesets "N", can be zero. - -- 1 unsigned 32-bits integer: metadata size "M" in bytes. - -- 1 byte: a bit field. It is reserved for flags used in common - obsolete marker operations, to avoid repeated decoding of metadata - entries. - -- 20 bytes: obsoleted changeset identifier. - -- N*20 bytes: new changesets identifiers. - -- M bytes: metadata as a sequence of nul-terminated strings. Each - string contains a key and a value, separated by a colon ':', without - additional encoding. Keys cannot contain '\0' or ':' and values - cannot contain '\0'. +The header is followed by the markers. Marker format depend of the version. See +comment associated with each format for details. """ import struct @@ -98,13 +81,6 @@ # you have to rely on third party extension extension to enable this. _enabled = False -# data used for parsing and writing -_fm0version = 0 -_fm0fixed = '>BIB20s' -_fm0node = '20s' -_fm0fsize = struct.calcsize(_fm0fixed) -_fm0fnodesize = struct.calcsize(_fm0node) - ### obsolescence marker flag ## bumpedfix flag @@ -137,24 +113,31 @@ # "bumped" here. bumpedfix = 1 -def _readmarkers(data): - """Read and enumerate markers from raw data""" - off = 0 - diskversion = _unpack('>B', data[off:off + 1])[0] - off += 1 - if diskversion not in formats: - raise util.Abort(_('parsing obsolete marker: unknown version %r') - % diskversion) - return diskversion, formats[diskversion][0](data, off) - -def encodemarkers(markers, addheader=False, version=_fm0version): - # Kept separate from flushmarkers(), it will be reused for - # markers exchange. - encodeone = formats[version][1] - if addheader: - yield _pack('>B', _fm0version) - for marker in markers: - yield encodeone(marker) +## Parsing and writing of version "0" +# +# The header is followed by the markers. Each marker is made of: +# +# - 1 unsigned byte: number of new changesets "N", can be zero. +# +# - 1 unsigned 32-bits integer: metadata size "M" in bytes. +# +# - 1 byte: a bit field. It is reserved for flags used in common +# obsolete marker operations, to avoid repeated decoding of metadata +# entries. +# +# - 20 bytes: obsoleted changeset identifier. +# +# - N*20 bytes: new changesets identifiers. +# +# - M bytes: metadata as a sequence of nul-terminated strings. Each +# string contains a key and a value, separated by a colon ':', without +# additional encoding. Keys cannot contain '\0' or ':' and values +# cannot contain '\0'. +_fm0version = 0 +_fm0fixed = '>BIB20s' +_fm0node = '20s' +_fm0fsize = struct.calcsize(_fm0fixed) +_fm0fnodesize = struct.calcsize(_fm0node) def _fm0readmarkers(data, off=0): # Loop on markers @@ -229,6 +212,26 @@ # <version> -> (decoder, encoder) formats = {0: (_fm0readmarkers, _fm0encodeonemarker)} +def _readmarkers(data): + """Read and enumerate markers from raw data""" + off = 0 + diskversion = _unpack('>B', data[off:off + 1])[0] + off += 1 + if diskversion not in formats: + raise util.Abort(_('parsing obsolete marker: unknown version %r') + % diskversion) + return diskversion, formats[diskversion][0](data, off) + +def encodemarkers(markers, addheader=False, version=_fm0version): + # Kept separate from flushmarkers(), it will be reused for + # markers exchange. + encodeone = formats[version][1] + if addheader: + yield _pack('>B', _fm0version) + for marker in markers: + yield encodeone(marker) + + def encodemeta(meta): """Return encoded metadata string to string mapping.