comparison mercurial/revlog.py @ 11962:5f7ee3db3dd8

revlog._addrevision(): make the parent of the cached delta explicit
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Wed, 18 Aug 2010 19:45:52 +0200
parents 927ada259634
children 7c3aa579d98a
comparison
equal deleted inserted replaced
11961:f3075ffa6b30 11962:5f7ee3db3dd8
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: