diff --git a/contrib/perf.py b/contrib/perf.py --- a/contrib/perf.py +++ b/contrib/perf.py @@ -2277,6 +2277,10 @@ def _temprevlog(ui, orig, truncaterev): if orig._inline: raise error.Abort('not supporting inline revlog (yet)') + revlogkwargs = {} + k = 'upperboundcomp' + if util.safehasattr(orig, k): + revlogkwargs[k] = getattr(orig, k) origindexpath = orig.opener.join(orig.indexfile) origdatapath = orig.opener.join(orig.datafile) @@ -2308,7 +2312,7 @@ def _temprevlog(ui, orig, truncaterev): dest = revlog.revlog(vfs, indexfile=indexname, - datafile=dataname) + datafile=dataname, **revlogkwargs) if dest._inline: raise error.Abort('not supporting inline revlog (yet)') # make sure internals are initialized diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -1417,6 +1417,10 @@ class manifestfulltextcache(util.lrucach self.write() self._read = False +# and upper bound of what we expect from compression +# (real live value seems to be "3") +MAXCOMPRESSION = 10 + @interfaceutil.implementer(repository.imanifeststorage) class manifestrevlog(object): '''A revlog that stores manifest texts. This is responsible for caching the @@ -1467,7 +1471,8 @@ class manifestrevlog(object): self._revlog = revlog.revlog(opener, indexfile, # only root indexfile is cached checkambig=not bool(tree), - mmaplargeindex=True) + mmaplargeindex=True, + upperboundcomp=MAXCOMPRESSION) self.index = self._revlog.index self.version = self._revlog.version diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -334,15 +334,21 @@ class revlog(object): configured threshold. If censorable is True, the revlog can have censored revisions. + + If `upperboundcomp` is not None, this is the expected maximal gain from + compression for the data content. """ def __init__(self, opener, indexfile, datafile=None, checkambig=False, - mmaplargeindex=False, censorable=False): + mmaplargeindex=False, censorable=False, + upperboundcomp=None): """ create a revlog object opener is a function that abstracts the file opening operation and can be used to implement COW semantics or the like. + """ + self.upperboundcomp = upperboundcomp self.indexfile = indexfile self.datafile = datafile or (indexfile[:-2] + ".d") self.opener = opener