Show More
@@ -900,6 +900,44 b' class _InnerRevlog:' | |||
|
900 | 900 | |
|
901 | 901 | return l |
|
902 | 902 | |
|
903 | def raw_text(self, node, rev): | |
|
904 | """return the possibly unvalidated rawtext for a revision | |
|
905 | ||
|
906 | returns (rev, rawtext, validated) | |
|
907 | """ | |
|
908 | ||
|
909 | # revision in the cache (could be useful to apply delta) | |
|
910 | cachedrev = None | |
|
911 | # An intermediate text to apply deltas to | |
|
912 | basetext = None | |
|
913 | ||
|
914 | # Check if we have the entry in cache | |
|
915 | # The cache entry looks like (node, rev, rawtext) | |
|
916 | if self._revisioncache: | |
|
917 | cachedrev = self._revisioncache[1] | |
|
918 | ||
|
919 | chain, stopped = self._deltachain(rev, stoprev=cachedrev) | |
|
920 | if stopped: | |
|
921 | basetext = self._revisioncache[2] | |
|
922 | ||
|
923 | # drop cache to save memory, the caller is expected to | |
|
924 | # update self._inner._revisioncache after validating the text | |
|
925 | self._revisioncache = None | |
|
926 | ||
|
927 | targetsize = None | |
|
928 | rawsize = self.index[rev][2] | |
|
929 | if 0 <= rawsize: | |
|
930 | targetsize = 4 * rawsize | |
|
931 | ||
|
932 | bins = self._chunks(chain, targetsize=targetsize) | |
|
933 | if basetext is None: | |
|
934 | basetext = bytes(bins[0]) | |
|
935 | bins = bins[1:] | |
|
936 | ||
|
937 | rawtext = mdiff.patches(basetext, bins) | |
|
938 | del basetext # let us have a chance to free memory early | |
|
939 | return (rev, rawtext, False) | |
|
940 | ||
|
903 | 941 | |
|
904 | 942 | class revlog: |
|
905 | 943 | """ |
@@ -2531,6 +2569,22 b' class revlog:' | |||
|
2531 | 2569 | rev = self.rev(nodeorrev) |
|
2532 | 2570 | return self._sidedata(rev) |
|
2533 | 2571 | |
|
2572 | def _rawtext(self, node, rev): | |
|
2573 | """return the possibly unvalidated rawtext for a revision | |
|
2574 | ||
|
2575 | returns (rev, rawtext, validated) | |
|
2576 | """ | |
|
2577 | # Check if we have the entry in cache | |
|
2578 | # The cache entry looks like (node, rev, rawtext) | |
|
2579 | if self._inner._revisioncache: | |
|
2580 | if self._inner._revisioncache[0] == node: | |
|
2581 | return (rev, self._inner._revisioncache[2], True) | |
|
2582 | ||
|
2583 | if rev is None: | |
|
2584 | rev = self.rev(node) | |
|
2585 | ||
|
2586 | return self._inner.raw_text(node, rev) | |
|
2587 | ||
|
2534 | 2588 | def _revisiondata(self, nodeorrev, raw=False): |
|
2535 | 2589 | # deal with <nodeorrev> argument type |
|
2536 | 2590 | if isinstance(nodeorrev, int): |
@@ -2575,49 +2629,6 b' class revlog:' | |||
|
2575 | 2629 | |
|
2576 | 2630 | return text |
|
2577 | 2631 | |
|
2578 | def _rawtext(self, node, rev): | |
|
2579 | """return the possibly unvalidated rawtext for a revision | |
|
2580 | ||
|
2581 | returns (rev, rawtext, validated) | |
|
2582 | """ | |
|
2583 | ||
|
2584 | # revision in the cache (could be useful to apply delta) | |
|
2585 | cachedrev = None | |
|
2586 | # An intermediate text to apply deltas to | |
|
2587 | basetext = None | |
|
2588 | ||
|
2589 | # Check if we have the entry in cache | |
|
2590 | # The cache entry looks like (node, rev, rawtext) | |
|
2591 | if self._inner._revisioncache: | |
|
2592 | if self._inner._revisioncache[0] == node: | |
|
2593 | return (rev, self._inner._revisioncache[2], True) | |
|
2594 | cachedrev = self._inner._revisioncache[1] | |
|
2595 | ||
|
2596 | if rev is None: | |
|
2597 | rev = self.rev(node) | |
|
2598 | ||
|
2599 | chain, stopped = self._inner._deltachain(rev, stoprev=cachedrev) | |
|
2600 | if stopped: | |
|
2601 | basetext = self._inner._revisioncache[2] | |
|
2602 | ||
|
2603 | # drop cache to save memory, the caller is expected to | |
|
2604 | # update self._inner._revisioncache after validating the text | |
|
2605 | self._inner._revisioncache = None | |
|
2606 | ||
|
2607 | targetsize = None | |
|
2608 | rawsize = self.index[rev][2] | |
|
2609 | if 0 <= rawsize: | |
|
2610 | targetsize = 4 * rawsize | |
|
2611 | ||
|
2612 | bins = self._inner._chunks(chain, targetsize=targetsize) | |
|
2613 | if basetext is None: | |
|
2614 | basetext = bytes(bins[0]) | |
|
2615 | bins = bins[1:] | |
|
2616 | ||
|
2617 | rawtext = mdiff.patches(basetext, bins) | |
|
2618 | del basetext # let us have a chance to free memory early | |
|
2619 | return (rev, rawtext, False) | |
|
2620 | ||
|
2621 | 2632 | def _sidedata(self, rev): |
|
2622 | 2633 | """Return the sidedata for a given revision number.""" |
|
2623 | 2634 | index_entry = self.index[rev] |
General Comments 0
You need to be logged in to leave comments.
Login now