291 if not inline: |
291 if not inline: |
292 cls = IndexObject2 if revlogv2 else IndexObject |
292 cls = IndexObject2 if revlogv2 else IndexObject |
293 return cls(data), None |
293 return cls(data), None |
294 cls = InlinedIndexObject |
294 cls = InlinedIndexObject |
295 return cls(data, inline), (0, data) |
295 return cls(data, inline), (0, data) |
|
296 |
|
297 |
|
298 def parse_index_cl_v2(data): |
|
299 return IndexChangelogV2(data), None |
296 |
300 |
297 |
301 |
298 class IndexObject2(IndexObject): |
302 class IndexObject2(IndexObject): |
299 index_format = revlog_constants.INDEX_ENTRY_V2 |
303 index_format = revlog_constants.INDEX_ENTRY_V2 |
300 |
304 |
353 msg = 'version header should go in the docket, not the index: %d' |
357 msg = 'version header should go in the docket, not the index: %d' |
354 msg %= header |
358 msg %= header |
355 raise error.ProgrammingError(msg) |
359 raise error.ProgrammingError(msg) |
356 |
360 |
357 |
361 |
|
362 class IndexChangelogV2(IndexObject2): |
|
363 index_format = revlog_constants.INDEX_ENTRY_CL_V2 |
|
364 |
|
365 def _unpack_entry(self, rev, data, r=True): |
|
366 items = self.index_format.unpack(data) |
|
367 entry = items[:3] + (rev, rev) + items[3:8] |
|
368 data_comp = items[8] & 3 |
|
369 sidedata_comp = (items[8] >> 2) & 3 |
|
370 return entry + (data_comp, sidedata_comp) |
|
371 |
|
372 def _pack_entry(self, rev, entry): |
|
373 assert entry[3] == rev, entry[3] |
|
374 assert entry[4] == rev, entry[4] |
|
375 data = entry[:3] + entry[5:10] |
|
376 data_comp = entry[10] & 3 |
|
377 sidedata_comp = (entry[11] & 3) << 2 |
|
378 data += (data_comp | sidedata_comp,) |
|
379 return self.index_format.pack(*data) |
|
380 |
|
381 |
358 def parse_index_devel_nodemap(data, inline): |
382 def parse_index_devel_nodemap(data, inline): |
359 """like parse_index2, but alway return a PersistentNodeMapIndexObject""" |
383 """like parse_index2, but alway return a PersistentNodeMapIndexObject""" |
360 return PersistentNodeMapIndexObject(data), None |
384 return PersistentNodeMapIndexObject(data), None |
361 |
385 |
362 |
386 |