##// END OF EJS Templates
revlog: move decompress() from module to revlog class (API)...
Gregory Szorc -
r30793:b6f455a6 default
parent child Browse files
Show More
@@ -34,7 +34,6 b' from mercurial import ('
34 extensions,
34 extensions,
35 mdiff,
35 mdiff,
36 merge,
36 merge,
37 revlog,
38 util,
37 util,
39 )
38 )
40
39
@@ -989,7 +988,7 b' def perfrevlogrevision(ui, repo, file_, '
989 chunkstart += (rev + 1) * iosize
988 chunkstart += (rev + 1) * iosize
990 chunklength = length(rev)
989 chunklength = length(rev)
991 b = buffer(data, chunkstart - offset, chunklength)
990 b = buffer(data, chunkstart - offset, chunklength)
992 revlog.decompress(b)
991 r.decompress(b)
993
992
994 def dopatch(text, bins):
993 def dopatch(text, bins):
995 if not cache:
994 if not cache:
@@ -140,22 +140,6 b' def hash(text, p1, p2):'
140 s.update(text)
140 s.update(text)
141 return s.digest()
141 return s.digest()
142
142
143 def decompress(bin):
144 """ decompress the given input """
145 if not bin:
146 return bin
147 t = bin[0]
148 if t == '\0':
149 return bin
150 if t == 'x':
151 try:
152 return _decompress(bin)
153 except zlib.error as e:
154 raise RevlogError(_("revlog decompress error: %s") % str(e))
155 if t == 'u':
156 return util.buffer(bin, 1)
157 raise RevlogError(_("unknown compression type %r") % t)
158
159 # index v0:
143 # index v0:
160 # 4 bytes: offset
144 # 4 bytes: offset
161 # 4 bytes: compressed length
145 # 4 bytes: compressed length
@@ -1179,7 +1163,7 b' class revlog(object):'
1179
1163
1180 Returns a str holding uncompressed data for the requested revision.
1164 Returns a str holding uncompressed data for the requested revision.
1181 """
1165 """
1182 return decompress(self._chunkraw(rev, rev, df=df)[1])
1166 return self.decompress(self._chunkraw(rev, rev, df=df)[1])
1183
1167
1184 def _chunks(self, revs, df=None):
1168 def _chunks(self, revs, df=None):
1185 """Obtain decompressed chunks for the specified revisions.
1169 """Obtain decompressed chunks for the specified revisions.
@@ -1212,12 +1196,13 b' class revlog(object):'
1212 # 2G on Windows
1196 # 2G on Windows
1213 return [self._chunk(rev, df=df) for rev in revs]
1197 return [self._chunk(rev, df=df) for rev in revs]
1214
1198
1199 decomp = self.decompress
1215 for rev in revs:
1200 for rev in revs:
1216 chunkstart = start(rev)
1201 chunkstart = start(rev)
1217 if inline:
1202 if inline:
1218 chunkstart += (rev + 1) * iosize
1203 chunkstart += (rev + 1) * iosize
1219 chunklength = length(rev)
1204 chunklength = length(rev)
1220 ladd(decompress(buffer(data, chunkstart - offset, chunklength)))
1205 ladd(decomp(buffer(data, chunkstart - offset, chunklength)))
1221
1206
1222 return l
1207 return l
1223
1208
@@ -1509,6 +1494,26 b' class revlog(object):'
1509 return ('u', text)
1494 return ('u', text)
1510 return ("", bin)
1495 return ("", bin)
1511
1496
1497 def decompress(self, data):
1498 """Decompress a revlog chunk.
1499
1500 The chunk is expected to begin with a header identifying the
1501 format type so it can be routed to an appropriate decompressor.
1502 """
1503 if not data:
1504 return data
1505 t = data[0]
1506 if t == '\0':
1507 return data
1508 if t == 'x':
1509 try:
1510 return _decompress(data)
1511 except zlib.error as e:
1512 raise RevlogError(_('revlog decompress error: %s') % str(e))
1513 if t == 'u':
1514 return util.buffer(data, 1)
1515 raise RevlogError(_('unknown compression type %r') % t)
1516
1512 def _isgooddelta(self, d, textlen):
1517 def _isgooddelta(self, d, textlen):
1513 """Returns True if the given delta is good. Good means that it is within
1518 """Returns True if the given delta is good. Good means that it is within
1514 the disk span, disk size, and chain length bounds that we know to be
1519 the disk span, disk size, and chain length bounds that we know to be
General Comments 0
You need to be logged in to leave comments. Login now