mercurial/pure/parsers.py
changeset 47270 25ce16bf724b
parent 47268 9d1a8829f959
child 47394 ac60a1366a49
equal deleted inserted replaced
47269:6be2a7ca4b1d 47270:25ce16bf724b
   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