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 |
r |
|
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(decomp |
|
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