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, |