Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/revlog.py @ 4987:8d30004ada40
revlog: some basic code reordering
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 23 Jul 2007 20:44:08 -0500 |
parents | 58cc017ec7e0 |
children | 14486eea8e7a |
comparison
equal
deleted
inserted
replaced
4986:58cc017ec7e0 | 4987:8d30004ada40 |
---|---|
13 from node import * | 13 from node import * |
14 from i18n import _ | 14 from i18n import _ |
15 import binascii, changegroup, errno, ancestor, mdiff, os | 15 import binascii, changegroup, errno, ancestor, mdiff, os |
16 import sha, struct, util, zlib | 16 import sha, struct, util, zlib |
17 | 17 |
18 # revlog version strings | 18 # revlog flags |
19 REVLOGV0 = 0 | 19 REVLOGV0 = 0 |
20 REVLOGNG = 1 | 20 REVLOGNG = 1 |
21 | |
22 # revlog flags | |
23 REVLOGNGINLINEDATA = (1 << 16) | 21 REVLOGNGINLINEDATA = (1 << 16) |
24 REVLOG_DEFAULT_FLAGS = REVLOGNGINLINEDATA | 22 REVLOG_DEFAULT_FLAGS = REVLOGNGINLINEDATA |
25 | |
26 REVLOG_DEFAULT_FORMAT = REVLOGNG | 23 REVLOG_DEFAULT_FORMAT = REVLOGNG |
27 REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS | 24 REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS |
25 | |
26 class RevlogError(Exception): | |
27 pass | |
28 class LookupError(RevlogError): | |
29 pass | |
30 | |
31 def getoffset(q): | |
32 if q & 0xFFFF: | |
33 raise RevlogError(_('incompatible revision flag %x') % q) | |
34 return int(q >> 16) | |
35 | |
36 def gettype(q): | |
37 return int(q & 0xFFFF) | |
38 | |
39 def offset_type(offset, type): | |
40 return long(long(offset) << 16 | type) | |
28 | 41 |
29 def hash(text, p1, p2): | 42 def hash(text, p1, p2): |
30 """generate a hash from the given text and its parent hashes | 43 """generate a hash from the given text and its parent hashes |
31 | 44 |
32 This hash combines both the current file contents and its history | 45 This hash combines both the current file contents and its history |
65 if t == 'x': | 78 if t == 'x': |
66 return zlib.decompress(bin) | 79 return zlib.decompress(bin) |
67 if t == 'u': | 80 if t == 'u': |
68 return bin[1:] | 81 return bin[1:] |
69 raise RevlogError(_("unknown compression type %r") % t) | 82 raise RevlogError(_("unknown compression type %r") % t) |
70 | |
71 indexformatv0 = ">4l20s20s20s" | |
72 v0shaoffset = 56 | |
73 # index ng: | |
74 # 6 bytes offset | |
75 # 2 bytes flags | |
76 # 4 bytes compressed length | |
77 # 4 bytes uncompressed length | |
78 # 4 bytes: base rev | |
79 # 4 bytes link rev | |
80 # 4 bytes parent 1 rev | |
81 # 4 bytes parent 2 rev | |
82 # 32 bytes: nodeid | |
83 indexformatng = ">Qiiiiii20s12x" | |
84 ngshaoffset = 32 | |
85 versionformat = ">I" | |
86 | 83 |
87 class lazyparser(object): | 84 class lazyparser(object): |
88 """ | 85 """ |
89 this class avoids the need to parse the entirety of large indices | 86 this class avoids the need to parse the entirety of large indices |
90 """ | 87 """ |
287 def __setitem__(self, key, val): | 284 def __setitem__(self, key, val): |
288 self.p.map[key] = val | 285 self.p.map[key] = val |
289 def __delitem__(self, key): | 286 def __delitem__(self, key): |
290 del self.p.map[key] | 287 del self.p.map[key] |
291 | 288 |
292 class RevlogError(Exception): | 289 indexformatv0 = ">4l20s20s20s" |
293 pass | 290 v0shaoffset = 56 |
294 class LookupError(RevlogError): | |
295 pass | |
296 | |
297 def getoffset(q): | |
298 if q & 0xFFFF: | |
299 raise RevlogError(_('incompatible revision flag %x') % q) | |
300 return int(q >> 16) | |
301 | |
302 def gettype(q): | |
303 return int(q & 0xFFFF) | |
304 | |
305 def offset_type(offset, type): | |
306 return long(long(offset) << 16 | type) | |
307 | 291 |
308 class revlogoldio(object): | 292 class revlogoldio(object): |
309 def __init__(self): | 293 def __init__(self): |
310 self.size = struct.calcsize(indexformatv0) | 294 self.size = struct.calcsize(indexformatv0) |
311 | 295 |
331 | 315 |
332 def packentry(self, entry, node, version): | 316 def packentry(self, entry, node, version): |
333 e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], | 317 e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], |
334 node(entry[5]), node(entry[6]), entry[7]) | 318 node(entry[5]), node(entry[6]), entry[7]) |
335 return struct.pack(indexformatv0, *e2) | 319 return struct.pack(indexformatv0, *e2) |
320 | |
321 # index ng: | |
322 # 6 bytes offset | |
323 # 2 bytes flags | |
324 # 4 bytes compressed length | |
325 # 4 bytes uncompressed length | |
326 # 4 bytes: base rev | |
327 # 4 bytes link rev | |
328 # 4 bytes parent 1 rev | |
329 # 4 bytes parent 2 rev | |
330 # 32 bytes: nodeid | |
331 indexformatng = ">Qiiiiii20s12x" | |
332 ngshaoffset = 32 | |
333 versionformat = ">I" | |
336 | 334 |
337 class revlogio(object): | 335 class revlogio(object): |
338 def __init__(self): | 336 def __init__(self): |
339 self.size = struct.calcsize(indexformatng) | 337 self.size = struct.calcsize(indexformatng) |
340 | 338 |
1251 if inst.errno != errno.ENOENT: | 1249 if inst.errno != errno.ENOENT: |
1252 raise | 1250 raise |
1253 di = 0 | 1251 di = 0 |
1254 | 1252 |
1255 return (dd, di) | 1253 return (dd, di) |
1256 | |
1257 |