1157 # version is not the one we have a delta against. We use |
1158 # version is not the one we have a delta against. We use |
1158 # the size of the previous full rev as a proxy for the |
1159 # the size of the previous full rev as a proxy for the |
1159 # current size. |
1160 # current size. |
1160 |
1161 |
1161 if chain == prev: |
1162 if chain == prev: |
1162 tempd = compress(delta) |
1163 cdelta = compress(delta) |
1163 cdelta = tempd[0] + tempd[1] |
1164 cdeltalen = len(cdelta[0]) + len(cdelta[1]) |
1164 textlen = mdiff.patchedsize(textlen, delta) |
1165 textlen = mdiff.patchedsize(textlen, delta) |
1165 |
1166 |
1166 if chain != prev or (end - start + len(cdelta)) > textlen * 2: |
1167 if chain != prev or (end - start + cdeltalen) > textlen * 2: |
1167 # flush our writes here so we can read it in revision |
1168 # flush our writes here so we can read it in revision |
1168 if dfh: |
1169 if dfh: |
1169 dfh.flush() |
1170 dfh.flush() |
1170 ifh.flush() |
1171 ifh.flush() |
1171 text = self.revision(chain) |
1172 text = self.revision(chain) |
1172 text = mdiff.patches(text, [delta]) |
1173 if len(text) == 0: |
|
1174 # skip over trivial delta header |
|
1175 text = buffer(delta, 12) |
|
1176 else: |
|
1177 text = mdiff.patches(text, [delta]) |
|
1178 del delta |
1173 chk = self._addrevision(text, transaction, link, p1, p2, None, |
1179 chk = self._addrevision(text, transaction, link, p1, p2, None, |
1174 ifh, dfh) |
1180 ifh, dfh) |
1175 if not dfh and not self._inline: |
1181 if not dfh and not self._inline: |
1176 # addrevision switched from inline to conventional |
1182 # addrevision switched from inline to conventional |
1177 # reopen the index |
1183 # reopen the index |
1179 ifh = self.opener(self.indexfile, "a") |
1185 ifh = self.opener(self.indexfile, "a") |
1180 if chk != node: |
1186 if chk != node: |
1181 raise RevlogError(_("consistency error adding group")) |
1187 raise RevlogError(_("consistency error adding group")) |
1182 textlen = len(text) |
1188 textlen = len(text) |
1183 else: |
1189 else: |
1184 e = (offset_type(end, 0), len(cdelta), textlen, base, |
1190 e = (offset_type(end, 0), cdeltalen, textlen, base, |
1185 link, self.rev(p1), self.rev(p2), node) |
1191 link, self.rev(p1), self.rev(p2), node) |
1186 self.index.insert(-1, e) |
1192 self.index.insert(-1, e) |
1187 self.nodemap[node] = r |
1193 self.nodemap[node] = r |
1188 entry = self._io.packentry(e, self.node, self.version, r) |
1194 entry = self._io.packentry(e, self.node, self.version, r) |
1189 if self._inline: |
1195 if self._inline: |
1190 ifh.write(entry) |
1196 ifh.write(entry) |
1191 ifh.write(cdelta) |
1197 ifh.write(cdelta[0]) |
|
1198 ifh.write(cdelta[1]) |
1192 self.checkinlinesize(transaction, ifh) |
1199 self.checkinlinesize(transaction, ifh) |
1193 if not self._inline: |
1200 if not self._inline: |
1194 dfh = self.opener(self.datafile, "a") |
1201 dfh = self.opener(self.datafile, "a") |
1195 ifh = self.opener(self.indexfile, "a") |
1202 ifh = self.opener(self.indexfile, "a") |
1196 else: |
1203 else: |
1197 dfh.write(cdelta) |
1204 dfh.write(cdelta[0]) |
|
1205 dfh.write(cdelta[1]) |
1198 ifh.write(entry) |
1206 ifh.write(entry) |
1199 |
1207 |
1200 t, r, chain, prev = r, r + 1, node, node |
1208 t, r, chain, prev = r, r + 1, node, node |
1201 base = self.base(t) |
1209 base = self.base(t) |
1202 start = self.start(base) |
1210 start = self.start(base) |