comparison mercurial/revlog.py @ 2142:8a1e2a9c7013

Replaced 0 with REVLOGV0 where this meaning is used.
author Thomas Arendsen Hein <thomas@intevation.de>
date Thu, 27 Apr 2006 21:16:46 +0200
parents ed631e83fa06
children 6886bc0b77af
comparison
equal deleted inserted replaced
2141:ed631e83fa06 2142:8a1e2a9c7013
291 Both pieces of the revlog are written to in an append-only 291 Both pieces of the revlog are written to in an append-only
292 fashion, which means we never need to rewrite a file to insert or 292 fashion, which means we never need to rewrite a file to insert or
293 remove data, and can use some simple techniques to avoid the need 293 remove data, and can use some simple techniques to avoid the need
294 for locking while reading. 294 for locking while reading.
295 """ 295 """
296 def __init__(self, opener, indexfile, datafile, defversion=0): 296 def __init__(self, opener, indexfile, datafile, defversion=REVLOGV0):
297 """ 297 """
298 create a revlog object 298 create a revlog object
299 299
300 opener is a function that abstracts the file opening operation 300 opener is a function that abstracts the file opening operation
301 and can be used to implement COW semantics or the like. 301 and can be used to implement COW semantics or the like.
335 self.indexstat = st 335 self.indexstat = st
336 if len(i) > 0: 336 if len(i) > 0:
337 v = struct.unpack(versionformat, i)[0] 337 v = struct.unpack(versionformat, i)[0]
338 flags = v & ~0xFFFF 338 flags = v & ~0xFFFF
339 fmt = v & 0xFFFF 339 fmt = v & 0xFFFF
340 if fmt == 0: 340 if fmt == REVLOGV0:
341 if flags: 341 if flags:
342 raise RevlogError(_("index %s invalid flags %x for format v0" % 342 raise RevlogError(_("index %s invalid flags %x for format v0" %
343 (self.indexfile, flags))) 343 (self.indexfile, flags)))
344 elif fmt == REVLOGNG: 344 elif fmt == REVLOGNG:
345 if flags & ~REVLOGNGINLINEDATA: 345 if flags & ~REVLOGNGINLINEDATA:
347 (self.indexfile, flags))) 347 (self.indexfile, flags)))
348 else: 348 else:
349 raise RevlogError(_("index %s invalid format %d" % 349 raise RevlogError(_("index %s invalid format %d" %
350 (self.indexfile, fmt))) 350 (self.indexfile, fmt)))
351 self.version = v 351 self.version = v
352 if v == 0: 352 if v == REVLOGV0:
353 self.indexformat = indexformatv0 353 self.indexformat = indexformatv0
354 shaoffset = v0shaoffset 354 shaoffset = v0shaoffset
355 else: 355 else:
356 self.indexformat = indexformatng 356 self.indexformat = indexformatng
357 shaoffset = ngshaoffset 357 shaoffset = ngshaoffset
367 self.parseindex(i) 367 self.parseindex(i)
368 if self.inlinedata(): 368 if self.inlinedata():
369 # we've already got the entire data file read in, save it 369 # we've already got the entire data file read in, save it
370 # in the chunk data 370 # in the chunk data
371 self.chunkcache = (0, i) 371 self.chunkcache = (0, i)
372 if self.version != 0: 372 if self.version != REVLOGV0:
373 e = list(self.index[0]) 373 e = list(self.index[0])
374 type = self.ngtype(e[0]) 374 type = self.ngtype(e[0])
375 e[0] = self.offset_type(0, type) 375 e[0] = self.offset_type(0, type)
376 self.index[0] = e 376 self.index[0] = e
377 else: 377 else:
439 def linkrev(self, node): return self.index[self.rev(node)][-4] 439 def linkrev(self, node): return self.index[self.rev(node)][-4]
440 def parents(self, node): 440 def parents(self, node):
441 if node == nullid: return (nullid, nullid) 441 if node == nullid: return (nullid, nullid)
442 r = self.rev(node) 442 r = self.rev(node)
443 d = self.index[r][-3:-1] 443 d = self.index[r][-3:-1]
444 if self.version == 0: 444 if self.version == REVLOGV0:
445 return d 445 return d
446 return [ self.node(x) for x in d ] 446 return [ self.node(x) for x in d ]
447 def start(self, rev): 447 def start(self, rev):
448 if rev < 0: 448 if rev < 0:
449 return -1 449 return -1
450 if self.version != 0: 450 if self.version != REVLOGV0:
451 return self.ngoffset(self.index[rev][0]) 451 return self.ngoffset(self.index[rev][0])
452 return self.index[rev][0] 452 return self.index[rev][0]
453 453
454 def end(self, rev): return self.start(rev) + self.length(rev) 454 def end(self, rev): return self.start(rev) + self.length(rev)
455 455
456 def size(self, rev): 456 def size(self, rev):
457 """return the length of the uncompressed text for a given revision""" 457 """return the length of the uncompressed text for a given revision"""
458 l = -1 458 l = -1
459 if self.version != 0: 459 if self.version != REVLOGV0:
460 l = self.index[rev][2] 460 l = self.index[rev][2]
461 if l >= 0: 461 if l >= 0:
462 return l 462 return l
463 463
464 t = self.revision(self.node(rev)) 464 t = self.revision(self.node(rev))
909 909
910 offset = 0 910 offset = 0
911 if t >= 0: 911 if t >= 0:
912 offset = self.end(t) 912 offset = self.end(t)
913 913
914 if self.version == 0: 914 if self.version == REVLOGV0:
915 e = (offset, l, base, link, p1, p2, node) 915 e = (offset, l, base, link, p1, p2, node)
916 else: 916 else:
917 e = (self.offset_type(offset, 0), l, len(text), 917 e = (self.offset_type(offset, 0), l, len(text),
918 base, link, self.rev(p1), self.rev(p2), node) 918 base, link, self.rev(p1), self.rev(p2), node)
919 919
933 else: 933 else:
934 f = self.opener(self.indexfile, "a+") 934 f = self.opener(self.indexfile, "a+")
935 f.seek(0, 2) 935 f.seek(0, 2)
936 transaction.add(self.indexfile, f.tell(), self.count() - 1) 936 transaction.add(self.indexfile, f.tell(), self.count() - 1)
937 937
938 if len(self.index) == 1 and self.version != 0: 938 if len(self.index) == 1 and self.version != REVLOGV0:
939 l = struct.pack(versionformat, self.version) 939 l = struct.pack(versionformat, self.version)
940 f.write(l) 940 f.write(l)
941 entry = entry[4:] 941 entry = entry[4:]
942 942
943 f.write(entry) 943 f.write(entry)
1133 chk = self.addrevision(text, transaction, link, p1, p2) 1133 chk = self.addrevision(text, transaction, link, p1, p2)
1134 if chk != node: 1134 if chk != node:
1135 raise RevlogError(_("consistency error adding group")) 1135 raise RevlogError(_("consistency error adding group"))
1136 textlen = len(text) 1136 textlen = len(text)
1137 else: 1137 else:
1138 if self.version == 0: 1138 if self.version == REVLOGV0:
1139 e = (end, len(cdelta), base, link, p1, p2, node) 1139 e = (end, len(cdelta), base, link, p1, p2, node)
1140 else: 1140 else:
1141 e = (self.offset_type(end, 0), len(cdelta), textlen, base, 1141 e = (self.offset_type(end, 0), len(cdelta), textlen, base,
1142 link, self.rev(p1), self.rev(p2), node) 1142 link, self.rev(p1), self.rev(p2), node)
1143 self.index.append(e) 1143 self.index.append(e)