mercurial/revlog.py
changeset 2080 1cbb14c048cb
parent 2079 ee96ca273f32
child 2081 416d8b2a75b8
equal deleted inserted replaced
2079:ee96ca273f32 2080:1cbb14c048cb
   133         i = blockstart / self.s
   133         i = blockstart / self.s
   134         off = 0
   134         off = 0
   135         for x in xrange(lend):
   135         for x in xrange(lend):
   136             if self.index[i + x] == None:
   136             if self.index[i + x] == None:
   137                 b = data[off : off + self.s]
   137                 b = data[off : off + self.s]
   138                 e = struct.unpack(self.format, b)
   138                 self.index[i + x] = b
   139                 self.index[i + x] = e
   139                 n = b[self.shaoffset:self.shaoffset + 20]
   140                 self.map[e[-1]] = i + x
   140                 self.map[n] = i + x
   141             off += self.s
   141             off += self.s
   142 
   142 
   143     def findnode(self, node):
   143     def findnode(self, node):
   144         """search backwards through the index file for a specific node"""
   144         """search backwards through the index file for a specific node"""
   145         if self.allmap: return None
   145         if self.allmap: return None
   216         if pos < 0:
   216         if pos < 0:
   217             pos += len(self.p.index)
   217             pos += len(self.p.index)
   218         self.p.loadindex(pos)
   218         self.p.loadindex(pos)
   219         return self.p.index[pos]
   219         return self.p.index[pos]
   220     def __getitem__(self, pos):
   220     def __getitem__(self, pos):
   221         return self.p.index[pos] or self.load(pos)
   221         ret = self.p.index[pos] or self.load(pos)
       
   222         if isinstance(ret, str):
       
   223             ret = struct.unpack(self.p.indexformat, ret)
       
   224         return ret
   222     def __setitem__(self, pos, item):
   225     def __setitem__(self, pos, item):
   223         self.p.index[pos] = item
   226         self.p.index[pos] = item
   224     def __delitem__(self, pos):
   227     def __delitem__(self, pos):
   225         del self.p.index[pos]
   228         del self.p.index[pos]
   226     def append(self, e):
   229     def append(self, e):
   240         self.p.loadmap()
   243         self.p.loadmap()
   241         return key in self.p.map
   244         return key in self.p.map
   242     def __iter__(self):
   245     def __iter__(self):
   243         yield nullid
   246         yield nullid
   244         for i in xrange(self.p.l):
   247         for i in xrange(self.p.l):
   245             try:
   248             ret = self.p.index[i]
   246                 yield self.p.index[i][-1]
   249             if not ret:
   247             except:
       
   248                 self.p.loadindex(i)
   250                 self.p.loadindex(i)
   249                 yield self.p.index[i][-1]
   251                 ret = self.p.index[i]
       
   252             if isinstance(ret, str):
       
   253                 ret = struct.unpack(self.p.indexformat, ret)
       
   254             yield ret[-1]
   250     def __getitem__(self, key):
   255     def __getitem__(self, key):
   251         try:
   256         try:
   252             return self.p.map[key]
   257             return self.p.map[key]
   253         except KeyError:
   258         except KeyError:
   254             try:
   259             try: