diff mercurial/revlog.py @ 19764:e92650e39f1c stable

generaldelta: initialize basecache properly Previously basecache was incorrectly initialized before adding the first revision from a changegroup. Basecache value influences 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.
author Wojciech Lopata <lopek@fb.com>
date Fri, 20 Sep 2013 10:45:51 -0700
parents fd1bb7c1be78
children a9e92b11a3f2
line wrap: on
line diff
--- a/mercurial/revlog.py	Sat Sep 07 15:07:10 2013 -0500
+++ b/mercurial/revlog.py	Fri Sep 20 10:45:51 2013 -0700
@@ -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 = {}
@@ -1095,6 +1095,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)