mercurial/revlogutils/docket.py
changeset 47332 0a3fa41fa719
parent 47331 f612db768c7a
child 47333 f286d715f9ab
--- 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,