[PATCH] generaldelta: initialize basecache properly
Wojciech Lopata
lopek at fb.com
Fri Sep 20 14:32:56 CDT 2013
http://pastebin.com/xV6H7ic3 - this scripts generates a regular repository and then pulls commits from it one by one to a generaldelta repository.
Size of 00manifest.d in regular repo was 156K, while with generaldelta it hit 808K.
In contrast size of 00manifest.d in a generaldelta repository that was created with 'hg clone --pull' was 156K as well, since bug was not revealed when pulling commits in big packets.
> -----Original Message-----
> From: mercurial-devel-bounces at selenic.com [mailto:mercurial-devel-
> bounces at selenic.com] On Behalf Of Wojciech Lopata
> Sent: Friday, September 20, 2013 12:31 PM
> To: mercurial-devel at selenic.com
> Subject: [PATCH] generaldelta: initialize basecache properly
>
> # 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)
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list