Mercurial > public > mercurial-scm > hg-stable
diff hgext/remotefilelog/datapack.py @ 40556:10c10da14c5d
remotefilelog: bump pack file formats to version 2
Drop support for format 0 and 1 packs. Version 2 will be different in
that it'll use zlib compression instead of lz4, as the latter isn't
really suitable for core.
If I can make it work, I'll make compression engines pluggable, but
the logic for handling these files is spread out enough it's a little
tricky to get that right.
Test changes are only due to pack files being renamed. The contents of
the packs are the same.
Differential Revision: https://phab.mercurial-scm.org/D4943
author | Augie Fackler <augie@google.com> |
---|---|
date | Wed, 03 Oct 2018 23:25:31 -0400 |
parents | 3a333a582d7b |
children | e2a1584e9e3f |
line wrap: on
line diff
--- a/hgext/remotefilelog/datapack.py Wed Oct 03 23:47:43 2018 -0400 +++ b/hgext/remotefilelog/datapack.py Wed Oct 03 23:25:31 2018 -0400 @@ -5,7 +5,6 @@ from mercurial.node import hex, nullid from mercurial.i18n import _ from mercurial import ( - error, pycompat, util, ) @@ -95,7 +94,7 @@ INDEXFORMAT = '!20siQQ' INDEXENTRYLENGTH = 40 - SUPPORTED_VERSIONS = [0, 1] + SUPPORTED_VERSIONS = [2] def getmissing(self, keys): missing = [] @@ -115,10 +114,6 @@ if value is None: raise KeyError((name, hex(node))) - # version 0 does not support metadata - if self.VERSION == 0: - return {} - node, deltabaseoffset, offset, size = value rawentry = self._data[offset:offset + size] @@ -203,14 +198,11 @@ delta = lz4wrapper.lz4decompress(delta) if getmeta: - if self.VERSION == 0: - meta = {} - else: - metastart = deltastart + 8 + deltalen - metalen = struct.unpack_from('!I', rawentry, metastart)[0] + metastart = deltastart + 8 + deltalen + metalen = struct.unpack_from('!I', rawentry, metastart)[0] - rawmeta = rawentry[metastart + 4:metastart + 4 + metalen] - meta = shallowutil.parsepackmeta(rawmeta) + rawmeta = rawentry[metastart + 4:metastart + 4 + metalen] + meta = shallowutil.parsepackmeta(rawmeta) return filename, node, deltabasenode, delta, meta else: return filename, node, deltabasenode, delta @@ -316,10 +308,9 @@ uncompressedlen = struct.unpack('<I', data[offset:offset + 4])[0] offset += deltalen - if self.VERSION == 1: - # <4 byte len> + <metadata-list> - metalen = struct.unpack_from('!I', data, offset)[0] - offset += 4 + metalen + # <4 byte len> + <metadata-list> + metalen = struct.unpack_from('!I', data, offset)[0] + offset += 4 + metalen yield (filename, node, deltabase, uncompressedlen) @@ -406,7 +397,7 @@ INDEXENTRYLENGTH = datapack.INDEXENTRYLENGTH # v1 has metadata support - SUPPORTED_VERSIONS = [0, 1] + SUPPORTED_VERSIONS = [2] def add(self, name, node, deltabasenode, delta, metadata=None): # metadata is a dict, ex. {METAKEYFLAG: flag} @@ -431,15 +422,10 @@ delta, )) - if self.VERSION == 1: - # v1 support metadata - rawmeta = shallowutil.buildpackmeta(metadata) - rawdata += struct.pack('!I', len(rawmeta)) # unsigned 4 byte - rawdata += rawmeta - else: - # v0 cannot store metadata, raise if metadata contains flag - if metadata and metadata.get(constants.METAKEYFLAG, 0) != 0: - raise error.ProgrammingError('v0 pack cannot store flags') + # v1 support metadata + rawmeta = shallowutil.buildpackmeta(metadata) + rawdata += struct.pack('!I', len(rawmeta)) # unsigned 4 byte + rawdata += rawmeta offset = self.packfp.tell()