129 rev = self.rev(node) |
129 rev = self.rev(node) |
130 |
130 |
131 if node == nullid: |
131 if node == nullid: |
132 return "" |
132 return "" |
133 |
133 |
134 text = None |
134 rawtext = None |
135 chain = [] |
135 chain = [] |
136 iterrev = rev |
136 iterrev = rev |
137 # reconstruct the revision if it is from a changegroup |
137 # reconstruct the revision if it is from a changegroup |
138 while iterrev > self.repotiprev: |
138 while iterrev > self.repotiprev: |
139 if self._cache and self._cache[1] == iterrev: |
139 if self._cache and self._cache[1] == iterrev: |
140 text = self._cache[2] |
140 rawtext = self._cache[2] |
141 break |
141 break |
142 chain.append(iterrev) |
142 chain.append(iterrev) |
143 iterrev = self.index[iterrev][3] |
143 iterrev = self.index[iterrev][3] |
144 if text is None: |
144 if rawtext is None: |
145 text = self.baserevision(iterrev) |
145 rawtext = self.baserevision(iterrev) |
146 |
146 |
147 while chain: |
147 while chain: |
148 delta = self._chunk(chain.pop()) |
148 delta = self._chunk(chain.pop()) |
149 text = mdiff.patches(text, [delta]) |
149 rawtext = mdiff.patches(rawtext, [delta]) |
150 |
150 |
151 text, validatehash = self._processflags(text, self.flags(rev), |
151 text, validatehash = self._processflags(rawtext, self.flags(rev), |
152 'read', raw=raw) |
152 'read', raw=raw) |
153 if validatehash: |
153 if validatehash: |
154 self.checkhash(text, node, rev=rev) |
154 self.checkhash(text, node, rev=rev) |
155 self._cache = (node, rev, text) |
155 self._cache = (node, rev, rawtext) |
156 return text |
156 return text |
157 |
157 |
158 def baserevision(self, nodeorrev): |
158 def baserevision(self, nodeorrev): |
159 # Revlog subclasses may override 'revision' method to modify format of |
159 # Revlog subclasses may override 'revision' method to modify format of |
160 # content retrieved from revlog. To use bundlerevlog with such class one |
160 # content retrieved from revlog. To use bundlerevlog with such class one |