--- a/mercurial/revlogutils/docket.py Tue May 18 15:07:17 2021 +0200
+++ b/mercurial/revlogutils/docket.py Wed May 19 16:55:36 2021 +0200
@@ -89,12 +89,13 @@
# | This is mandatory as docket must be compatible with the previous
# | revlog index header.
# * 1 bytes: size of index uuid
+# * 1 bytes: size of data uuid
# * 8 bytes: size of index-data
# * 8 bytes: pending size of index-data
# * 8 bytes: size of data
# * 8 bytes: pending size of data
# * 1 bytes: default compression header
-S_HEADER = struct.Struct(constants.INDEX_HEADER.format + 'BLLLLc')
+S_HEADER = struct.Struct(constants.INDEX_HEADER.format + 'BBLLLLc')
class RevlogDocket(object):
@@ -106,6 +107,7 @@
use_pending=False,
version_header=None,
index_uuid=None,
+ data_uuid=None,
index_end=0,
pending_index_end=0,
data_end=0,
@@ -119,6 +121,7 @@
self._path = revlog._docket_file
self._opener = revlog.opener
self._index_uuid = index_uuid
+ self._data_uuid = data_uuid
# thes asserts should be True as long as we have a single index filename
assert index_end <= pending_index_end
assert data_end <= pending_data_end
@@ -141,6 +144,13 @@
self._index_uuid = make_uid()
return b"%s-%s.idx" % (self._radix, self._index_uuid)
+ def data_filepath(self):
+ """file path to the current index file associated to this docket"""
+ # very simplistic version at first
+ if self._data_uuid is None:
+ self._data_uuid = make_uid()
+ return b"%s-%s.dat" % (self._radix, self._data_uuid)
+
@property
def index_end(self):
return self._index_end
@@ -195,6 +205,7 @@
data = (
self._version_header,
len(self._index_uuid),
+ len(self._data_uuid),
official_index_end,
self._index_end,
official_data_end,
@@ -204,6 +215,7 @@
s = []
s.append(S_HEADER.pack(*data))
s.append(self._index_uuid)
+ s.append(self._data_uuid)
return b''.join(s)
@@ -230,16 +242,20 @@
index_uuid_size = header[1]
index_uuid = data[offset : offset + index_uuid_size]
offset += index_uuid_size
- index_size = header[2]
- pending_index_size = header[3]
- data_size = header[4]
- pending_data_size = header[5]
- default_compression_header = header[6]
+ data_uuid_size = header[2]
+ data_uuid = data[offset : offset + data_uuid_size]
+ offset += data_uuid_size
+ index_size = header[3]
+ pending_index_size = header[4]
+ data_size = header[5]
+ pending_data_size = header[6]
+ default_compression_header = header[7]
docket = RevlogDocket(
revlog,
use_pending=use_pending,
version_header=version_header,
index_uuid=index_uuid,
+ data_uuid=data_uuid,
index_end=index_size,
pending_index_end=pending_index_size,
data_end=data_size,