172 self.size = struct.calcsize(indexformatng) |
172 self.size = struct.calcsize(indexformatng) |
173 |
173 |
174 def parseindex(self, data, inline): |
174 def parseindex(self, data, inline): |
175 # call the C implementation to parse the index data |
175 # call the C implementation to parse the index data |
176 index, cache = parsers.parse_index2(data, inline) |
176 index, cache = parsers.parse_index2(data, inline) |
177 return index, None, cache |
177 return index, getattr(index, 'nodemap', None), cache |
178 |
178 |
179 def packentry(self, entry, node, version, rev): |
179 def packentry(self, entry, node, version, rev): |
180 p = _pack(indexformatng, *entry) |
180 p = _pack(indexformatng, *entry) |
181 if rev == 0: |
181 if rev == 0: |
182 p = _pack(versionformat, version) + p[4:] |
182 p = _pack(versionformat, version) + p[4:] |
293 self.rev(node) |
293 self.rev(node) |
294 return True |
294 return True |
295 except KeyError: |
295 except KeyError: |
296 return False |
296 return False |
297 |
297 |
|
298 def clearcaches(self): |
|
299 try: |
|
300 self._nodecache.clearcaches() |
|
301 except AttributeError: |
|
302 self._nodecache = {nullid: nullrev} |
|
303 self._nodepos = None |
|
304 |
298 def rev(self, node): |
305 def rev(self, node): |
299 try: |
306 try: |
300 return self._nodecache[node] |
307 return self._nodecache[node] |
|
308 except RevlogError: |
|
309 # parsers.c radix tree lookup failed |
|
310 raise LookupError(node, self.indexfile, _('no node')) |
301 except KeyError: |
311 except KeyError: |
|
312 # pure python cache lookup failed |
302 n = self._nodecache |
313 n = self._nodecache |
303 i = self.index |
314 i = self.index |
304 p = self._nodepos |
315 p = self._nodepos |
305 if p is None: |
316 if p is None: |
306 p = len(i) - 2 |
317 p = len(i) - 2 |