mercurial/revlog.py
changeset 25410 eee88912db0a
parent 25361 1635579f9baf
child 25459 0bda5bfaf0b1
equal deleted inserted replaced
25409:95e042d77a5f 25410:eee88912db0a
   151 # 32 bytes: nodeid
   151 # 32 bytes: nodeid
   152 indexformatng = ">Qiiiiii20s12x"
   152 indexformatng = ">Qiiiiii20s12x"
   153 ngshaoffset = 32
   153 ngshaoffset = 32
   154 versionformat = ">I"
   154 versionformat = ">I"
   155 
   155 
       
   156 # corresponds to uncompressed length of indexformatng (2 gigs, 4-byte
       
   157 # signed integer)
       
   158 _maxentrysize = 0x7fffffff
       
   159 
   156 class revlogio(object):
   160 class revlogio(object):
   157     def __init__(self):
   161     def __init__(self):
   158         self.size = struct.calcsize(indexformatng)
   162         self.size = struct.calcsize(indexformatng)
   159 
   163 
   160     def parseindex(self, data, inline):
   164     def parseindex(self, data, inline):
   161         # call the C implementation to parse the index data
   165         # call the C implementation to parse the index data
   162         index, cache = parsers.parse_index2(data, inline)
   166         index, cache = parsers.parse_index2(data, inline)
   163         return index, getattr(index, 'nodemap', None), cache
   167         return index, getattr(index, 'nodemap', None), cache
   164 
   168 
   165     def packentry(self, entry, node, version, rev):
   169     def packentry(self, entry, node, version, rev):
       
   170         uncompressedlength = entry[2]
       
   171         if uncompressedlength > _maxentrysize:
       
   172             raise RevlogError(
       
   173                 _("size of %d bytes exceeds maximum revlog storage of 2GiB")
       
   174                 % uncompressedlength)
       
   175 
   166         p = _pack(indexformatng, *entry)
   176         p = _pack(indexformatng, *entry)
   167         if rev == 0:
   177         if rev == 0:
   168             p = _pack(versionformat, version) + p[4:]
   178             p = _pack(versionformat, version) + p[4:]
   169         return p
   179         return p
   170 
   180