Mercurial > public > mercurial-scm > hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
19751:478f3379768a | 19764:e92650e39f1c |
---|---|
198 """ | 198 """ |
199 self.indexfile = indexfile | 199 self.indexfile = indexfile |
200 self.datafile = indexfile[:-2] + ".d" | 200 self.datafile = indexfile[:-2] + ".d" |
201 self.opener = opener | 201 self.opener = opener |
202 self._cache = None | 202 self._cache = None |
203 self._basecache = (0, 0) | 203 self._basecache = None |
204 self._chunkcache = (0, '') | 204 self._chunkcache = (0, '') |
205 self.index = [] | 205 self.index = [] |
206 self._pcache = {} | 206 self._pcache = {} |
207 self._nodecache = {nullid: nullrev} | 207 self._nodecache = {nullid: nullrev} |
208 self._nodepos = None | 208 self._nodepos = None |
1093 prev = curr - 1 | 1093 prev = curr - 1 |
1094 base = chainbase = curr | 1094 base = chainbase = curr |
1095 offset = self.end(prev) | 1095 offset = self.end(prev) |
1096 flags = 0 | 1096 flags = 0 |
1097 d = None | 1097 d = None |
1098 if self._basecache is None: | |
1099 self._basecache = (prev, self.chainbase(prev)) | |
1098 basecache = self._basecache | 1100 basecache = self._basecache |
1099 p1r, p2r = self.rev(p1), self.rev(p2) | 1101 p1r, p2r = self.rev(p1), self.rev(p2) |
1100 | 1102 |
1101 # should we try to build a delta? | 1103 # should we try to build a delta? |
1102 if prev != nullrev: | 1104 if prev != nullrev: |