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 |