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