Mercurial > hg-stable
changeset 29945:1cc93a154723
manifest: move dirlog up to manifestrevlog
This removes dirlog and its associated cache from manifest and puts it in
manifestrevlog. The notion of there being sub-logs is specific to the revlog
implementation, and therefore belongs on the revlog class.
This patch will enable future patches to move the serialization logic for
manifests onto manifestrevlog, which will allow us to move manifest.add onto
manifestlog in a way that it just calls out to manifestrevlog for the
serialization.
author | Durham Goode <durham@fb.com> |
---|---|
date | Tue, 13 Sep 2016 16:00:41 -0700 |
parents | fa145a205a7f |
children | 3664537386ab |
files | mercurial/manifest.py |
diffstat | 1 files changed, 19 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/manifest.py Tue Sep 13 16:00:41 2016 -0700 +++ b/mercurial/manifest.py Tue Sep 13 16:00:41 2016 -0700 @@ -896,7 +896,7 @@ '''A revlog that stores manifest texts. This is responsible for caching the full-text manifest contents. ''' - def __init__(self, opener, dir=''): + def __init__(self, opener, dir='', dirlogcache=None): # 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. @@ -921,6 +921,11 @@ dir = dir + '/' indexfile = "meta/" + dir + "00manifest.i" self._dir = dir + # The dirlogcache is kept on the root manifest log + if dir: + self._dirlogcache = dirlogcache + else: + self._dirlogcache = {'': self} super(manifestrevlog, self).__init__(opener, indexfile) @@ -931,6 +936,15 @@ def clearcaches(self): super(manifestrevlog, self).clearcaches() self._fulltextcache.clear() + self._dirlogcache = {'': self} + + def dirlog(self, dir): + if dir: + assert self._treeondisk + if dir not in self._dirlogcache: + self._dirlogcache[dir] = manifestrevlog(self.opener, dir, + self._dirlogcache) + return self._dirlogcache[dir] class manifestlog(object): """A collection class representing the collection of manifest snapshots @@ -1115,12 +1129,7 @@ usetreemanifest = opts.get('treemanifest', usetreemanifest) self._mancache = util.lrucachedict(cachesize) self._treeinmem = usetreemanifest - super(manifest, self).__init__(opener, dir=dir) - # The dirlogcache is kept on the root manifest log - if dir: - self._dirlogcache = dirlogcache - else: - self._dirlogcache = {'': self} + super(manifest, self).__init__(opener, dir=dir, dirlogcache=dirlogcache) def _newmanifest(self, data=''): if self._treeinmem: @@ -1128,6 +1137,9 @@ return manifestdict(data) def dirlog(self, dir): + """This overrides the base revlog implementation to allow construction + 'manifest' types instead of manifestrevlog types. This is only needed + until we migrate off the 'manifest' type.""" if dir: assert self._treeondisk if dir not in self._dirlogcache: @@ -1282,4 +1294,3 @@ def clearcaches(self): super(manifest, self).clearcaches() self._mancache.clear() - self._dirlogcache = {'': self}