[PATCH] generaldelta: initialize basecache properly
Wojciech Lopata
lopek at fb.com
Fri Sep 20 14:31:01 CDT 2013
# HG changeset patch
# User Wojciech Lopata <lopek at fb.com>
# Date 1379699151 25200
# Fri Sep 20 10:45:51 2013 -0700
# Node ID e3bf4ac814f13279287e28742f816856bba178ff
# Parent 1c62f9487e46a467aace39316459a5be57c55e8a
generaldelta: initialize basecache properly
Previously basecache was incorrectly inicialized before add of first revision
from a changegroup. Basecache value infuences when full revisions are stored
in revlog (when using generaldelta). As a result it was possible to generate
a generaldelta-revlog that could be bigger by arbitrary factor than its
non-generaldelta equivalent.
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -200,7 +200,7 @@
self.datafile = indexfile[:-2] + ".d"
self.opener = opener
self._cache = None
- self._basecache = (0, 0)
+ self._basecache = None
self._chunkcache = (0, '')
self.index = []
self._pcache = {}
@@ -1131,6 +1131,8 @@
offset = self.end(prev)
flags = 0
d = None
+ if self._basecache is None:
+ self._basecache = (prev, self.chainbase(prev))
basecache = self._basecache
p1r, p2r = self.rev(p1), self.rev(p2)
More information about the Mercurial-devel
mailing list