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