mercurial/revlog.py
changeset 13254 5ef5eb1f3515
parent 13253 61c9bc3da402
child 13258 c2661863f16f
equal deleted inserted replaced
13253:61c9bc3da402 13254:5ef5eb1f3515
   170     def __init__(self):
   170     def __init__(self):
   171         self.size = struct.calcsize(indexformatng)
   171         self.size = struct.calcsize(indexformatng)
   172 
   172 
   173     def parseindex(self, fp, data, inline):
   173     def parseindex(self, fp, data, inline):
   174         # call the C implementation to parse the index data
   174         # call the C implementation to parse the index data
   175         index, nodemap, cache = parsers.parse_index(data, inline)
   175         index, cache = parsers.parse_index2(data, inline)
   176         return index, nodemap, cache
   176         return index, None, cache
   177 
   177 
   178     def packentry(self, entry, node, version, rev):
   178     def packentry(self, entry, node, version, rev):
   179         p = _pack(indexformatng, *entry)
   179         p = _pack(indexformatng, *entry)
   180         if rev == 0:
   180         if rev == 0:
   181             p = _pack(versionformat, version) + p[4:]
   181             p = _pack(versionformat, version) + p[4:]
   216         self.indexfile = indexfile
   216         self.indexfile = indexfile
   217         self.datafile = indexfile[:-2] + ".d"
   217         self.datafile = indexfile[:-2] + ".d"
   218         self.opener = opener
   218         self.opener = opener
   219         self._cache = None
   219         self._cache = None
   220         self._chunkcache = (0, '')
   220         self._chunkcache = (0, '')
   221         self.nodemap = {nullid: nullrev}
       
   222         self.index = []
   221         self.index = []
   223         self._shallowroot = shallowroot
   222         self._shallowroot = shallowroot
   224         self._parentdelta = 0
   223         self._parentdelta = 0
   225 
   224 
   226         v = REVLOG_DEFAULT_VERSION
   225         v = REVLOG_DEFAULT_VERSION
   265         if i:
   264         if i:
   266             try:
   265             try:
   267                 d = self._io.parseindex(f, i, self._inline)
   266                 d = self._io.parseindex(f, i, self._inline)
   268             except (ValueError, IndexError):
   267             except (ValueError, IndexError):
   269                 raise RevlogError(_("index %s is corrupted") % (self.indexfile))
   268                 raise RevlogError(_("index %s is corrupted") % (self.indexfile))
   270             self.index, self.nodemap, self._chunkcache = d
   269             self.index, n, self._chunkcache = d
       
   270             if n:
       
   271                 self.nodemap = n
   271             if not self._chunkcache:
   272             if not self._chunkcache:
   272                 self._chunkclear()
   273                 self._chunkclear()
   273 
   274 
   274         # add the magic null revision at -1 (if it hasn't been done already)
   275         # add the magic null revision at -1 (if it hasn't been done already)
   275         if self.index == [] or self.index[-1][7] != nullid:
   276         if self.index == [] or self.index[-1][7] != nullid:
   276             self.index.append((0, 0, 0, -1, -1, -1, -1, nullid))
   277             self.index.append((0, 0, 0, -1, -1, -1, -1, nullid))
       
   278 
       
   279     @util.propertycache
       
   280     def nodemap(self):
       
   281         n = {nullid: nullrev}
       
   282         i = self.index
       
   283         for r in xrange(len(i) - 1):
       
   284             n[i[r][7]] = r
       
   285         return n
   277 
   286 
   278     def tip(self):
   287     def tip(self):
   279         return self.node(len(self.index) - 2)
   288         return self.node(len(self.index) - 2)
   280     def __len__(self):
   289     def __len__(self):
   281         return len(self.index) - 1
   290         return len(self.index) - 1