Show More
@@ -3810,13 +3810,15 b' def perfrevlogchunks(ui, repo, file_=Non' | |||||
3810 |
|
3810 | |||
3811 | def dochunk(): |
|
3811 | def dochunk(): | |
3812 | rl.clearcaches() |
|
3812 | rl.clearcaches() | |
|
3813 | # chunk used to be available directly on the revlog | |||
|
3814 | _chunk = getattr(rl, '_inner', rl)._chunk | |||
3813 | with reading(rl) as fh: |
|
3815 | with reading(rl) as fh: | |
3814 | if fh is not None: |
|
3816 | if fh is not None: | |
3815 | for rev in revs: |
|
3817 | for rev in revs: | |
3816 |
|
|
3818 | _chunk(rev, df=fh) | |
3817 | else: |
|
3819 | else: | |
3818 | for rev in revs: |
|
3820 | for rev in revs: | |
3819 |
|
|
3821 | _chunk(rev) | |
3820 |
|
3822 | |||
3821 | chunks = [None] |
|
3823 | chunks = [None] | |
3822 |
|
3824 |
@@ -718,6 +718,28 b' class _InnerRevlog:' | |||||
718 |
|
718 | |||
719 | return start, self._segmentfile.read_chunk(start, length) |
|
719 | return start, self._segmentfile.read_chunk(start, length) | |
720 |
|
720 | |||
|
721 | def _chunk(self, rev): | |||
|
722 | """Obtain a single decompressed chunk for a revision. | |||
|
723 | ||||
|
724 | Accepts an integer revision and an optional already-open file handle | |||
|
725 | to be used for reading. If used, the seek position of the file will not | |||
|
726 | be preserved. | |||
|
727 | ||||
|
728 | Returns a str holding uncompressed data for the requested revision. | |||
|
729 | """ | |||
|
730 | compression_mode = self.index[rev][10] | |||
|
731 | data = self.get_segment_for_revs(rev, rev)[1] | |||
|
732 | if compression_mode == COMP_MODE_PLAIN: | |||
|
733 | return data | |||
|
734 | elif compression_mode == COMP_MODE_DEFAULT: | |||
|
735 | return self._decompressor(data) | |||
|
736 | elif compression_mode == COMP_MODE_INLINE: | |||
|
737 | return self.decompress(data) | |||
|
738 | else: | |||
|
739 | msg = b'unknown compression mode %d' | |||
|
740 | msg %= compression_mode | |||
|
741 | raise error.RevlogError(msg) | |||
|
742 | ||||
721 |
|
743 | |||
722 | class revlog: |
|
744 | class revlog: | |
723 | """ |
|
745 | """ | |
@@ -2336,28 +2358,6 b' class revlog:' | |||||
2336 | p1, p2 = self.parents(node) |
|
2358 | p1, p2 = self.parents(node) | |
2337 | return storageutil.hashrevisionsha1(text, p1, p2) != node |
|
2359 | return storageutil.hashrevisionsha1(text, p1, p2) != node | |
2338 |
|
2360 | |||
2339 | def _chunk(self, rev): |
|
|||
2340 | """Obtain a single decompressed chunk for a revision. |
|
|||
2341 |
|
||||
2342 | Accepts an integer revision and an optional already-open file handle |
|
|||
2343 | to be used for reading. If used, the seek position of the file will not |
|
|||
2344 | be preserved. |
|
|||
2345 |
|
||||
2346 | Returns a str holding uncompressed data for the requested revision. |
|
|||
2347 | """ |
|
|||
2348 | compression_mode = self.index[rev][10] |
|
|||
2349 | data = self._inner.get_segment_for_revs(rev, rev)[1] |
|
|||
2350 | if compression_mode == COMP_MODE_PLAIN: |
|
|||
2351 | return data |
|
|||
2352 | elif compression_mode == COMP_MODE_DEFAULT: |
|
|||
2353 | return self._inner._decompressor(data) |
|
|||
2354 | elif compression_mode == COMP_MODE_INLINE: |
|
|||
2355 | return self._inner.decompress(data) |
|
|||
2356 | else: |
|
|||
2357 | msg = b'unknown compression mode %d' |
|
|||
2358 | msg %= compression_mode |
|
|||
2359 | raise error.RevlogError(msg) |
|
|||
2360 |
|
||||
2361 | def _chunks(self, revs, targetsize=None): |
|
2361 | def _chunks(self, revs, targetsize=None): | |
2362 | """Obtain decompressed chunks for the specified revisions. |
|
2362 | """Obtain decompressed chunks for the specified revisions. | |
2363 |
|
2363 | |||
@@ -2404,7 +2404,7 b' class revlog:' | |||||
2404 | except OverflowError: |
|
2404 | except OverflowError: | |
2405 | # issue4215 - we can't cache a run of chunks greater than |
|
2405 | # issue4215 - we can't cache a run of chunks greater than | |
2406 | # 2G on Windows |
|
2406 | # 2G on Windows | |
2407 | return [self._chunk(rev) for rev in revschunk] |
|
2407 | return [self._inner._chunk(rev) for rev in revschunk] | |
2408 |
|
2408 | |||
2409 | decomp = self._inner.decompress |
|
2409 | decomp = self._inner.decompress | |
2410 | # self._decompressor might be None, but will not be used in that case |
|
2410 | # self._decompressor might be None, but will not be used in that case | |
@@ -2484,7 +2484,7 b' class revlog:' | |||||
2484 | revlog data directly. So this function needs raw revision data. |
|
2484 | revlog data directly. So this function needs raw revision data. | |
2485 | """ |
|
2485 | """ | |
2486 | if rev1 != nullrev and self.deltaparent(rev2) == rev1: |
|
2486 | if rev1 != nullrev and self.deltaparent(rev2) == rev1: | |
2487 | return bytes(self._chunk(rev2)) |
|
2487 | return bytes(self._inner._chunk(rev2)) | |
2488 |
|
2488 | |||
2489 | return mdiff.textdiff(self.rawdata(rev1), self.rawdata(rev2)) |
|
2489 | return mdiff.textdiff(self.rawdata(rev1), self.rawdata(rev2)) | |
2490 |
|
2490 | |||
@@ -3681,7 +3681,7 b' class revlog:' | |||||
3681 | if destrevlog.delta_config.lazy_delta: |
|
3681 | if destrevlog.delta_config.lazy_delta: | |
3682 | dp = self.deltaparent(rev) |
|
3682 | dp = self.deltaparent(rev) | |
3683 | if dp != nullrev: |
|
3683 | if dp != nullrev: | |
3684 | cachedelta = (dp, bytes(self._chunk(rev))) |
|
3684 | cachedelta = (dp, bytes(self._inner._chunk(rev))) | |
3685 |
|
3685 | |||
3686 | sidedata = None |
|
3686 | sidedata = None | |
3687 | if not cachedelta: |
|
3687 | if not cachedelta: |
@@ -109,7 +109,7 b' def v1_censor(rl, tr, censornode, tombst' | |||||
109 | b'revision having delta stored' |
|
109 | b'revision having delta stored' | |
110 | ) |
|
110 | ) | |
111 | raise error.Abort(m) |
|
111 | raise error.Abort(m) | |
112 | rawtext = rl._chunk(rev) |
|
112 | rawtext = rl._inner._chunk(rev) | |
113 | else: |
|
113 | else: | |
114 | rawtext = rl.rawdata(rev) |
|
114 | rawtext = rl.rawdata(rev) | |
115 |
|
115 |
General Comments 0
You need to be logged in to leave comments.
Login now