comparison mercurial/revlog.py @ 12888:ad01fe38afe6 stable

revlog: extract delta building to a subfunction
author Matt Mackall <mpm@selenic.com>
date Sat, 30 Oct 2010 02:47:34 -0500
parents 8ce6240587b1
children 5482c6b826f4
comparison
equal deleted inserted replaced
12887:8ce6240587b1 12888:ad01fe38afe6
1170 chk = hash(btext[0], p1, p2) 1170 chk = hash(btext[0], p1, p2)
1171 if chk != node: 1171 if chk != node:
1172 raise RevlogError(_("consistency error in delta")) 1172 raise RevlogError(_("consistency error in delta"))
1173 return btext[0] 1173 return btext[0]
1174 1174
1175 def builddelta(rev):
1176 # can we use the cached delta?
1177 if cachedelta and cachedelta[0] == rev:
1178 delta = cachedelta[1]
1179 else:
1180 t = buildtext()
1181 ptext = self.revision(self.node(rev))
1182 delta = mdiff.textdiff(ptext, t)
1183 data = compress(delta)
1184 l = len(data[1]) + len(data[0])
1185 base = self.base(rev)
1186 dist = l + offset - self.start(base)
1187 return dist, l, data, base
1188
1175 curr = len(self) 1189 curr = len(self)
1176 prev = curr - 1 1190 prev = curr - 1
1177 base = curr 1191 base = curr
1178 offset = self.end(prev) 1192 offset = self.end(prev)
1179 flags = 0 1193 flags = 0
1185 else: 1199 else:
1186 deltarev, deltanode = prev, self.node(prev) 1200 deltarev, deltanode = prev, self.node(prev)
1187 1201
1188 # should we try to build a delta? 1202 # should we try to build a delta?
1189 if deltarev != nullrev: 1203 if deltarev != nullrev:
1190 # can we use the cached delta? 1204 d = builddelta(deltarev)
1191 if cachedelta and cachedelta[0] == deltarev: 1205 dist, l, data, base = d
1192 d = cachedelta[1]
1193 else:
1194 t = buildtext()
1195 ptext = self.revision(deltanode)
1196 d = mdiff.textdiff(ptext, t)
1197 data = compress(d)
1198 l = len(data[1]) + len(data[0])
1199 base = self.base(deltarev)
1200 dist = l + offset - self.start(base)
1201 1206
1202 # full versions are inserted when the needed deltas 1207 # full versions are inserted when the needed deltas
1203 # become comparable to the uncompressed text 1208 # become comparable to the uncompressed text
1204 # or the base revision is punched 1209 # or the base revision is punched
1205 if text is None: 1210 if text is None: