##// END OF EJS Templates
revlog: move the `rawtext` method on the inner object...
marmoute -
r51990:be56d322 default
parent child Browse files
Show More
@@ -900,6 +900,44 b' class _InnerRevlog:'
900
900
901 return l
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 class revlog:
942 class revlog:
905 """
943 """
@@ -2531,6 +2569,22 b' class revlog:'
2531 rev = self.rev(nodeorrev)
2569 rev = self.rev(nodeorrev)
2532 return self._sidedata(rev)
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 def _revisiondata(self, nodeorrev, raw=False):
2588 def _revisiondata(self, nodeorrev, raw=False):
2535 # deal with <nodeorrev> argument type
2589 # deal with <nodeorrev> argument type
2536 if isinstance(nodeorrev, int):
2590 if isinstance(nodeorrev, int):
@@ -2575,49 +2629,6 b' class revlog:'
2575
2629
2576 return text
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 def _sidedata(self, rev):
2632 def _sidedata(self, rev):
2622 """Return the sidedata for a given revision number."""
2633 """Return the sidedata for a given revision number."""
2623 index_entry = self.index[rev]
2634 index_entry = self.index[rev]
General Comments 0
You need to be logged in to leave comments. Login now