##// END OF EJS Templates
tests: don't use "status" operand of dd in test-censor.t (issue6858)...
tests: don't use "status" operand of dd in test-censor.t (issue6858) Some implementations don't have this operand, let's just direct stderr into /dev/null, that's pretty cross-platform. Also specify bs=512 (the default for me), because the default might be different on different systems. Other uses of dd in the tests do specify it, so this is more consistent.

File last commit:

r49801:642e31cb default
r52208:c7edfccf stable
Show More
docket.py
70 lines | 2.2 KiB | text/x-python | PythonLexer
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 # dirstatedocket.py - docket file for dirstate-v2
#
# Copyright Mercurial Contributors
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
import struct
from ..revlogutils import docket as docket_mod
Simon Sapin
dirstate-v2: initial Python parser...
r49035 from . import v2
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474
V2_FORMAT_MARKER = b"dirstate-v2\n"
# * 12 bytes: format marker
# * 32 bytes: node ID of the working directory's first parent
# * 32 bytes: node ID of the working directory's second parent
Simon Sapin
dirstate-v2: Move data file info in the docket closer together...
r48977 # * {TREE_METADATA_SIZE} bytes: tree metadata, parsed separately
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 # * 4 bytes: big-endian used size of the data file
# * 1 byte: length of the data file's UUID
# * variable: data file's UUID
#
# Node IDs are null-padded if shorter than 32 bytes.
# A data file shorter than the specified used size is corrupted (truncated)
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 HEADER = struct.Struct(
Simon Sapin
dirstate-v2: initial Python parser...
r49035 ">{}s32s32s{}sLB".format(len(V2_FORMAT_MARKER), v2.TREE_METADATA_SIZE)
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 )
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474
Gregory Szorc
py3: use class X: instead of class X(object):...
r49801 class DirstateDocket:
Simon Sapin
dirstate-v2: Remove the `.d` suffix in data file names...
r48780 data_filename_pattern = b'dirstate.%s'
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 def __init__(self, parents, data_size, tree_metadata, uuid):
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 self.parents = parents
self.data_size = data_size
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 self.tree_metadata = tree_metadata
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 self.uuid = uuid
@classmethod
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 def with_new_uuid(cls, parents, data_size, tree_metadata):
return cls(parents, data_size, tree_metadata, docket_mod.make_uid())
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474
@classmethod
def parse(cls, data, nodeconstants):
if not data:
parents = (nodeconstants.nullid, nodeconstants.nullid)
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 return cls(parents, 0, b'', None)
Simon Sapin
dirstate-v2: Move data file info in the docket closer together...
r48977 marker, p1, p2, meta, data_size, uuid_size = HEADER.unpack_from(data)
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 if marker != V2_FORMAT_MARKER:
raise ValueError("expected dirstate-v2 marker")
uuid = data[HEADER.size : HEADER.size + uuid_size]
p1 = p1[: nodeconstants.nodelen]
p2 = p2[: nodeconstants.nodelen]
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 return cls((p1, p2), data_size, meta, uuid)
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474
def serialize(self):
p1, p2 = self.parents
header = HEADER.pack(
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 V2_FORMAT_MARKER,
p1,
p2,
Simon Sapin
dirstate-v2: Move data file info in the docket closer together...
r48977 self.tree_metadata,
Simon Sapin
dirstate-v2: Move fixed-size tree metadata into the docket file...
r48482 self.data_size,
len(self.uuid),
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 )
return header + self.uuid
def data_filename(self):
return self.data_filename_pattern % self.uuid