From patchwork Fri Sep 20 19:31:01 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: generaldelta: initialize basecache properly From: Wojciech Lopata X-Patchwork-Id: 2577 Message-Id: To: mercurial-devel@selenic.com Date: Fri, 20 Sep 2013 12:31:01 -0700 # HG changeset patch # User Wojciech Lopata # 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)