equal
deleted
inserted
replaced
10 of the GNU General Public License, incorporated herein by reference. |
10 of the GNU General Public License, incorporated herein by reference. |
11 """ |
11 """ |
12 |
12 |
13 import zlib, struct, sha, binascii, heapq |
13 import zlib, struct, sha, binascii, heapq |
14 from mercurial import mdiff |
14 from mercurial import mdiff |
15 |
15 from node import * |
16 def hex(node): return binascii.hexlify(node) |
|
17 def bin(node): return binascii.unhexlify(node) |
|
18 def short(node): return hex(node[:6]) |
|
19 |
16 |
20 def compress(text): |
17 def compress(text): |
21 """ generate a possibly-compressed representation of text """ |
18 """ generate a possibly-compressed representation of text """ |
22 if not text: return text |
19 if not text: return text |
23 if len(text) < 44: |
20 if len(text) < 44: |
36 if t == '\0': return bin |
33 if t == '\0': return bin |
37 if t == 'x': return zlib.decompress(bin) |
34 if t == 'x': return zlib.decompress(bin) |
38 if t == 'u': return bin[1:] |
35 if t == 'u': return bin[1:] |
39 raise RevlogError("unknown compression type %s" % t) |
36 raise RevlogError("unknown compression type %s" % t) |
40 |
37 |
41 def hash(text, p1, p2): |
|
42 """generate a hash from the given text and its parent hashes |
|
43 |
|
44 This hash combines both the current file contents and its history |
|
45 in a manner that makes it easy to distinguish nodes with the same |
|
46 content in the revision graph. |
|
47 """ |
|
48 l = [p1, p2] |
|
49 l.sort() |
|
50 s = sha.new(l[0]) |
|
51 s.update(l[1]) |
|
52 s.update(text) |
|
53 return s.digest() |
|
54 |
|
55 nullid = "\0" * 20 |
|
56 indexformat = ">4l20s20s20s" |
38 indexformat = ">4l20s20s20s" |
57 |
39 |
58 class lazyparser: |
40 class lazyparser: |
59 """ |
41 """ |
60 this class avoids the need to parse the entirety of large indices |
42 this class avoids the need to parse the entirety of large indices |