Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 12886:c25945a148c1 stable
revlog: fix buildtext local scope
buildtext stores its result in _addrevision scope to avoid repeated builds
cachedelta is already visible
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 30 Oct 2010 02:47:34 -0500 |
parents | 557988c691d1 |
children | 8ce6240587b1 |
comparison
equal
deleted
inserted
replaced
12885:b5eae8e24e80 | 12886:c25945a148c1 |
---|---|
1155 ifh.close() | 1155 ifh.close() |
1156 | 1156 |
1157 def _addrevision(self, node, text, transaction, link, p1, p2, | 1157 def _addrevision(self, node, text, transaction, link, p1, p2, |
1158 cachedelta, ifh, dfh): | 1158 cachedelta, ifh, dfh): |
1159 | 1159 |
1160 def buildtext(cachedelta): | 1160 btext = [text] |
1161 if text is not None: | 1161 def buildtext(): |
1162 return text | 1162 if btext[0] is not None: |
1163 return btext[0] | |
1163 # flush any pending writes here so we can read it in revision | 1164 # flush any pending writes here so we can read it in revision |
1164 if dfh: | 1165 if dfh: |
1165 dfh.flush() | 1166 dfh.flush() |
1166 ifh.flush() | 1167 ifh.flush() |
1167 basetext = self.revision(self.node(cachedelta[0])) | 1168 basetext = self.revision(self.node(cachedelta[0])) |
1168 patchedtext = mdiff.patch(basetext, cachedelta[1]) | 1169 btext[0] = mdiff.patch(basetext, cachedelta[1]) |
1169 chk = hash(patchedtext, p1, p2) | 1170 chk = hash(btext[0], p1, p2) |
1170 if chk != node: | 1171 if chk != node: |
1171 raise RevlogError(_("consistency error in delta")) | 1172 raise RevlogError(_("consistency error in delta")) |
1172 return patchedtext | 1173 return btext[0] |
1173 | 1174 |
1174 curr = len(self) | 1175 curr = len(self) |
1175 prev = curr - 1 | 1176 prev = curr - 1 |
1176 base = curr | 1177 base = curr |
1177 offset = self.end(prev) | 1178 offset = self.end(prev) |
1188 if deltarev != nullrev: | 1189 if deltarev != nullrev: |
1189 # can we use the cached delta? | 1190 # can we use the cached delta? |
1190 if cachedelta: | 1191 if cachedelta: |
1191 cacherev, d = cachedelta | 1192 cacherev, d = cachedelta |
1192 if cacherev != deltarev: | 1193 if cacherev != deltarev: |
1193 text = buildtext(cachedelta) | 1194 text = buildtext() |
1194 d = None | 1195 d = None |
1195 if d is None: | 1196 if d is None: |
1196 ptext = self.revision(deltanode) | 1197 ptext = self.revision(deltanode) |
1197 d = mdiff.textdiff(ptext, text) | 1198 d = mdiff.textdiff(ptext, text) |
1198 data = compress(d) | 1199 data = compress(d) |
1208 cachedelta[1]) | 1209 cachedelta[1]) |
1209 else: | 1210 else: |
1210 textlen = len(text) | 1211 textlen = len(text) |
1211 if (d is None or dist > textlen * 2 or | 1212 if (d is None or dist > textlen * 2 or |
1212 (self.flags(base) & REVIDX_PUNCHED_FLAG)): | 1213 (self.flags(base) & REVIDX_PUNCHED_FLAG)): |
1213 text = buildtext(cachedelta) | 1214 text = buildtext() |
1214 data = compress(text) | 1215 data = compress(text) |
1215 l = len(data[1]) + len(data[0]) | 1216 l = len(data[1]) + len(data[0]) |
1216 base = curr | 1217 base = curr |
1217 | 1218 |
1218 e = (offset_type(offset, flags), l, textlen, | 1219 e = (offset_type(offset, flags), l, textlen, |