Mercurial > public > mercurial-scm > hg
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: |