Mercurial > hg
changeset 32252:d67991c4fefe
treemanifest: allow manifestrevlog to take an explicit treemanifest arg
Previously we relied on the opener options to tell the revlog to be a tree
manifest. This makes it complicated for extensions to create treemanifests and
normal manifests at the same time. Let's add a construtor argument to create a
treemanifest revlog as well.
I considered removing the options['treemanifest'] logic from manifestrevlog
entirely, but doing so shifts the responsibility to the caller which ends up
requiring changes in localrepo, bundlerepo, and unionrepo. I figured having the
dual mechanism was better than polluting other parts of the code base with
treemanifest knowledge.
author | Durham Goode <durham@fb.com> |
---|---|
date | Tue, 09 May 2017 13:56:46 -0700 |
parents | a04f5c651e52 |
children | 7d4ce4b567c5 |
files | mercurial/manifest.py |
diffstat | 1 files changed, 14 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/manifest.py Wed Apr 26 23:02:43 2017 +0900 +++ b/mercurial/manifest.py Tue May 09 13:56:46 2017 -0700 @@ -1175,25 +1175,31 @@ '''A revlog that stores manifest texts. This is responsible for caching the full-text manifest contents. ''' - def __init__(self, opener, dir='', dirlogcache=None, indexfile=None): + def __init__(self, opener, dir='', dirlogcache=None, indexfile=None, + treemanifest=False): """Constructs a new manifest revlog `indexfile` - used by extensions to have two manifests at once, like when transitioning between flatmanifeset and treemanifests. + + `treemanifest` - used to indicate this is a tree manifest revlog. Opener + options can also be used to make this a tree manifest revlog. The opener + option takes precedence, so if it is set to True, we ignore whatever + value is passed in to the constructor. """ # During normal operations, we expect to deal with not more than four # revs at a time (such as during commit --amend). When rebasing large # stacks of commits, the number can go up, hence the config knob below. cachesize = 4 - usetreemanifest = False + optiontreemanifest = False usemanifestv2 = False opts = getattr(opener, 'options', None) if opts is not None: cachesize = opts.get('manifestcachesize', cachesize) - usetreemanifest = opts.get('treemanifest', usetreemanifest) + optiontreemanifest = opts.get('treemanifest', False) usemanifestv2 = opts.get('manifestv2', usemanifestv2) - self._treeondisk = usetreemanifest + self._treeondisk = optiontreemanifest or treemanifest self._usemanifestv2 = usemanifestv2 self._fulltextcache = util.lrucachedict(cachesize) @@ -1231,8 +1237,10 @@ if dir: assert self._treeondisk if dir not in self._dirlogcache: - self._dirlogcache[dir] = manifestrevlog(self.opener, dir, - self._dirlogcache) + mfrevlog = manifestrevlog(self.opener, dir, + self._dirlogcache, + treemanifest=self._treeondisk) + self._dirlogcache[dir] = mfrevlog return self._dirlogcache[dir] def add(self, m, transaction, link, p1, p2, added, removed, readtree=None):