comparison mercurial/revlog.py @ 4978:93d48a8fa496

revlog: change accesses to index entry elements to use positive offsets
author Matt Mackall <mpm@selenic.com>
date Mon, 23 Jul 2007 20:44:08 -0500
parents 6cb30bc4ca32
children 06abdaf78788
comparison
equal deleted inserted replaced
4977:6cb30bc4ca32 4978:93d48a8fa496
258 if not ret: 258 if not ret:
259 self.p.loadindex(i) 259 self.p.loadindex(i)
260 ret = self.p.index[i] 260 ret = self.p.index[i]
261 if isinstance(ret, str): 261 if isinstance(ret, str):
262 ret = struct.unpack(indexformatng, ret) 262 ret = struct.unpack(indexformatng, ret)
263 yield ret[-1] 263 yield ret[7]
264 def __getitem__(self, key): 264 def __getitem__(self, key):
265 try: 265 try:
266 return self.p.map[key] 266 return self.p.map[key]
267 except KeyError: 267 except KeyError:
268 try: 268 try:
342 if inline: 342 if inline:
343 self.chunkcache = (0, data) 343 self.chunkcache = (0, data)
344 while off + s <= l: 344 while off + s <= l:
345 e = struct.unpack(indexformatng, data[off:off + s]) 345 e = struct.unpack(indexformatng, data[off:off + s])
346 index.append(e) 346 index.append(e)
347 nodemap[e[-1]] = n 347 nodemap[e[7]] = n
348 n += 1 348 n += 1
349 off += s 349 off += s
350 if inline: 350 if inline:
351 if e[1] < 0: 351 if e[1] < 0:
352 break 352 break
473 def _inline(self): return self.version & REVLOGNGINLINEDATA 473 def _inline(self): return self.version & REVLOGNGINLINEDATA
474 474
475 def tip(self): return self.node(len(self.index) - 1) 475 def tip(self): return self.node(len(self.index) - 1)
476 def count(self): return len(self.index) 476 def count(self): return len(self.index)
477 def node(self, rev): 477 def node(self, rev):
478 return rev == nullrev and nullid or self.index[rev][-1] 478 return rev == nullrev and nullid or self.index[rev][7]
479 def rev(self, node): 479 def rev(self, node):
480 try: 480 try:
481 return self.nodemap[node] 481 return self.nodemap[node]
482 except KeyError: 482 except KeyError:
483 raise LookupError(_('%s: no node %s') % (self.indexfile, hex(node))) 483 raise LookupError(_('%s: no node %s') % (self.indexfile, hex(node)))
484 def linkrev(self, node): 484 def linkrev(self, node):
485 return (node == nullid) and nullrev or self.index[self.rev(node)][-4] 485 return (node == nullid) and nullrev or self.index[self.rev(node)][4]
486 def parents(self, node): 486 def parents(self, node):
487 if node == nullid: return (nullid, nullid) 487 if node == nullid: return (nullid, nullid)
488 r = self.rev(node) 488 r = self.rev(node)
489 d = self.index[r][-3:-1] 489 d = self.index[r][5:7]
490 return (self.node(d[0]), self.node(d[1])) 490 return (self.node(d[0]), self.node(d[1]))
491 def parentrevs(self, rev): 491 def parentrevs(self, rev):
492 if rev == nullrev: 492 if rev == nullrev:
493 return (nullrev, nullrev) 493 return (nullrev, nullrev)
494 d = self.index[rev][-3:-1] 494 d = self.index[rev][5:7]
495 return d 495 return d
496 def start(self, rev): 496 def start(self, rev):
497 if rev == nullrev: 497 if rev == nullrev:
498 return 0 498 return 0
499 return getoffset(self.index[rev][0]) 499 return getoffset(self.index[rev][0])
538 return self.index[rev][1] 538 return self.index[rev][1]
539 def base(self, rev): 539 def base(self, rev):
540 if (rev == nullrev): 540 if (rev == nullrev):
541 return nullrev 541 return nullrev
542 else: 542 else:
543 return self.index[rev][-5] 543 return self.index[rev][3]
544 544
545 def reachable(self, node, stop=None): 545 def reachable(self, node, stop=None):
546 """return a hash of all nodes ancestral to a given node, including 546 """return a hash of all nodes ancestral to a given node, including
547 the node itself, stopping when stop is matched""" 547 the node itself, stopping when stop is matched"""
548 reachable = {} 548 reachable = {}
1227 1227
1228 # When stripping away a revision, we need to make sure it 1228 # When stripping away a revision, we need to make sure it
1229 # does not actually belong to an older changeset. 1229 # does not actually belong to an older changeset.
1230 # The minlink parameter defines the oldest revision 1230 # The minlink parameter defines the oldest revision
1231 # we're allowed to strip away. 1231 # we're allowed to strip away.
1232 while minlink > self.index[rev][-4]: 1232 while minlink > self.index[rev][4]:
1233 rev += 1 1233 rev += 1
1234 if rev >= self.count(): 1234 if rev >= self.count():
1235 return 1235 return
1236 1236
1237 # first truncate the files on disk 1237 # first truncate the files on disk