comparison mercurial/revlog.py @ 12890:b1c839659140 stable

revlog: choose best delta for parentdelta (issue2466) When parentdelta is enabled, we choose the delta that has the minimum distance to its base. Otherwise, base may be sufficiently far away to require a full version, resulting in greatly reduced compression.
author Matt Mackall <mpm@selenic.com>
date Sat, 30 Oct 2010 02:47:34 -0500
parents 5482c6b826f4
children 6878eaa5a40d
comparison
equal deleted inserted replaced
12889:5482c6b826f4 12890:b1c839659140
1192 offset = self.end(prev) 1192 offset = self.end(prev)
1193 flags = 0 1193 flags = 0
1194 d = None 1194 d = None
1195 p1r, p2r = self.rev(p1), self.rev(p2) 1195 p1r, p2r = self.rev(p1), self.rev(p2)
1196 1196
1197 if self._parentdelta:
1198 deltarev, deltanode = p1r, p1
1199 flags = REVIDX_PARENTDELTA
1200 else:
1201 deltarev, deltanode = prev, self.node(prev)
1202
1203 # should we try to build a delta? 1197 # should we try to build a delta?
1204 if deltarev != nullrev: 1198 if prev != nullrev:
1205 d = builddelta(deltarev) 1199 d = builddelta(prev)
1200 if self._parentdelta and prev != p1r:
1201 d2 = builddelta(p1r)
1202 if d2 < d:
1203 d = d2
1204 flags = REVIDX_PARENTDELTA
1206 dist, l, data, base = d 1205 dist, l, data, base = d
1207 1206
1208 # full versions are inserted when the needed deltas 1207 # full versions are inserted when the needed deltas
1209 # become comparable to the uncompressed text 1208 # become comparable to the uncompressed text
1210 # or the base revision is punched 1209 # or the base revision is punched