Mercurial > hg
changeset 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 | b69fd38a034e |
files | mercurial/revlog.py |
diffstat | 1 files changed, 7 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlog.py Sat Oct 30 02:47:34 2010 -0500 +++ b/mercurial/revlog.py Sat Oct 30 02:47:34 2010 -0500 @@ -1194,15 +1194,14 @@ d = None p1r, p2r = self.rev(p1), self.rev(p2) - if self._parentdelta: - deltarev, deltanode = p1r, p1 - flags = REVIDX_PARENTDELTA - else: - deltarev, deltanode = prev, self.node(prev) - # should we try to build a delta? - if deltarev != nullrev: - d = builddelta(deltarev) + if prev != nullrev: + d = builddelta(prev) + if self._parentdelta and prev != p1r: + d2 = builddelta(p1r) + if d2 < d: + d = d2 + flags = REVIDX_PARENTDELTA dist, l, data, base = d # full versions are inserted when the needed deltas