1140 fp.rename() |
1140 fp.rename() |
1141 |
1141 |
1142 tr.replace(self.indexfile, trindex * self._io.size) |
1142 tr.replace(self.indexfile, trindex * self._io.size) |
1143 self._chunkclear() |
1143 self._chunkclear() |
1144 |
1144 |
1145 def addrevision(self, text, transaction, link, p1, p2, d=None): |
1145 def addrevision(self, text, transaction, link, p1, p2, cachedelta=None): |
1146 """add a revision to the log |
1146 """add a revision to the log |
1147 |
1147 |
1148 text - the revision data to add |
1148 text - the revision data to add |
1149 transaction - the transaction object used for rollback |
1149 transaction - the transaction object used for rollback |
1150 link - the linkrev data to add |
1150 link - the linkrev data to add |
1154 dfh = None |
1154 dfh = None |
1155 if not self._inline: |
1155 if not self._inline: |
1156 dfh = self.opener(self.datafile, "a") |
1156 dfh = self.opener(self.datafile, "a") |
1157 ifh = self.opener(self.indexfile, "a+") |
1157 ifh = self.opener(self.indexfile, "a+") |
1158 try: |
1158 try: |
1159 return self._addrevision(text, transaction, link, p1, p2, d, ifh, dfh) |
1159 return self._addrevision(text, transaction, link, p1, p2, |
|
1160 cachedelta, ifh, dfh) |
1160 finally: |
1161 finally: |
1161 if dfh: |
1162 if dfh: |
1162 dfh.close() |
1163 dfh.close() |
1163 ifh.close() |
1164 ifh.close() |
1164 |
1165 |
1165 def _addrevision(self, text, transaction, link, p1, p2, d, ifh, dfh): |
1166 def _addrevision(self, text, transaction, link, p1, p2, |
|
1167 cachedelta, ifh, dfh): |
1166 node = hash(text, p1, p2) |
1168 node = hash(text, p1, p2) |
1167 if node in self.nodemap: |
1169 if node in self.nodemap: |
1168 return node |
1170 return node |
1169 |
1171 |
1170 curr = len(self) |
1172 curr = len(self) |
1171 prev = curr - 1 |
1173 prev = curr - 1 |
1172 base = self.base(prev) |
1174 base = self.base(prev) |
1173 offset = self.end(prev) |
1175 offset = self.end(prev) |
1174 flags = 0 |
1176 flags = 0 |
|
1177 d = None |
1175 |
1178 |
1176 if curr: |
1179 if curr: |
|
1180 # can we use the cached delta? |
|
1181 if cachedelta: |
|
1182 cacherev, d = cachedelta |
|
1183 if cacherev != prev: |
|
1184 d = None |
1177 if not d: |
1185 if not d: |
1178 if self._parentdelta: |
1186 if self._parentdelta: |
1179 ptext = self.revision(p1) |
1187 ptext = self.revision(p1) |
1180 flags = REVIDX_PARENTDELTA |
1188 flags = REVIDX_PARENTDELTA |
1181 else: |
1189 else: |