34 # | revlog index header. |
35 # | revlog index header. |
35 # * 8 bytes: size of index-data |
36 # * 8 bytes: size of index-data |
36 # * 8 bytes: pending size of index-data |
37 # * 8 bytes: pending size of index-data |
37 # * 8 bytes: size of data |
38 # * 8 bytes: size of data |
38 # * 8 bytes: pending size of data |
39 # * 8 bytes: pending size of data |
39 S_HEADER = struct.Struct(constants.INDEX_HEADER.format + 'LLLL') |
40 # * 1 bytes: default compression header |
|
41 S_HEADER = struct.Struct(constants.INDEX_HEADER.format + 'LLLLc') |
40 |
42 |
41 |
43 |
42 class RevlogDocket(object): |
44 class RevlogDocket(object): |
43 """metadata associated with revlog""" |
45 """metadata associated with revlog""" |
44 |
46 |
69 self._index_end = self._pending_index_end |
72 self._index_end = self._pending_index_end |
70 self._data_end = self._pending_data_end |
73 self._data_end = self._pending_data_end |
71 else: |
74 else: |
72 self._index_end = self._initial_index_end |
75 self._index_end = self._initial_index_end |
73 self._data_end = self._initial_data_end |
76 self._data_end = self._initial_data_end |
|
77 self.default_compression_header = default_compression_header |
74 |
78 |
75 def index_filepath(self): |
79 def index_filepath(self): |
76 """file path to the current index file associated to this docket""" |
80 """file path to the current index file associated to this docket""" |
77 # very simplistic version at first |
81 # very simplistic version at first |
78 return b"%s.idx" % self._radix |
82 return b"%s.idx" % self._radix |
132 self._version_header, |
136 self._version_header, |
133 official_index_end, |
137 official_index_end, |
134 self._index_end, |
138 self._index_end, |
135 official_data_end, |
139 official_data_end, |
136 self._data_end, |
140 self._data_end, |
|
141 self.default_compression_header, |
137 ) |
142 ) |
138 return S_HEADER.pack(*data) |
143 return S_HEADER.pack(*data) |
139 |
144 |
140 |
145 |
141 def default_docket(revlog, version_header): |
146 def default_docket(revlog, version_header): |
142 """given a revlog version a new docket object for the given revlog""" |
147 """given a revlog version a new docket object for the given revlog""" |
143 if (version_header & 0xFFFF) != constants.REVLOGV2: |
148 if (version_header & 0xFFFF) != constants.REVLOGV2: |
144 return None |
149 return None |
145 docket = RevlogDocket(revlog, version_header=version_header) |
150 comp = util.compengines[revlog._compengine].revlogheader() |
|
151 docket = RevlogDocket( |
|
152 revlog, |
|
153 version_header=version_header, |
|
154 default_compression_header=comp, |
|
155 ) |
146 docket._dirty = True |
156 docket._dirty = True |
147 return docket |
157 return docket |
148 |
158 |
149 |
159 |
150 def parse_docket(revlog, data, use_pending=False): |
160 def parse_docket(revlog, data, use_pending=False): |
153 version_header = header[0] |
163 version_header = header[0] |
154 index_size = header[1] |
164 index_size = header[1] |
155 pending_index_size = header[2] |
165 pending_index_size = header[2] |
156 data_size = header[3] |
166 data_size = header[3] |
157 pending_data_size = header[4] |
167 pending_data_size = header[4] |
|
168 default_compression_header = header[5] |
158 docket = RevlogDocket( |
169 docket = RevlogDocket( |
159 revlog, |
170 revlog, |
160 use_pending=use_pending, |
171 use_pending=use_pending, |
161 version_header=version_header, |
172 version_header=version_header, |
162 index_end=index_size, |
173 index_end=index_size, |
163 pending_index_end=pending_index_size, |
174 pending_index_end=pending_index_size, |
164 data_end=data_size, |
175 data_end=data_size, |
165 pending_data_end=pending_data_size, |
176 pending_data_end=pending_data_size, |
|
177 default_compression_header=default_compression_header, |
166 ) |
178 ) |
167 return docket |
179 return docket |