diff -r e6e023d57e94 -r c2287f203ec4 mercurial/manifest.py --- a/mercurial/manifest.py Thu Mar 19 11:08:42 2015 -0700 +++ b/mercurial/manifest.py Thu Mar 19 11:07:57 2015 -0700 @@ -556,16 +556,24 @@ # 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 opts = getattr(opener, 'options', None) if opts is not None: cachesize = opts.get('manifestcachesize', cachesize) + usetreemanifest = opts.get('usetreemanifest', usetreemanifest) self._mancache = util.lrucachedict(cachesize) revlog.revlog.__init__(self, opener, "00manifest.i") + self._usetreemanifest = usetreemanifest + + def _newmanifest(self, data=''): + if self._usetreemanifest: + return treemanifest(data) + return manifestdict(data) def readdelta(self, node): r = self.rev(node) d = mdiff.patchtext(self.revdiff(self.deltaparent(r), r)) - return manifestdict(d) + return self._newmanifest(d) def readfast(self, node): '''use the faster of readdelta or read''' @@ -577,12 +585,12 @@ def read(self, node): if node == revlog.nullid: - return manifestdict() # don't upset local cache + return self._newmanifest() # don't upset local cache if node in self._mancache: return self._mancache[node][0] text = self.revision(node) arraytext = array.array('c', text) - m = manifestdict(text) + m = self._newmanifest(text) self._mancache[node] = (m, arraytext) return m @@ -596,7 +604,7 @@ return None, None def add(self, m, transaction, link, p1, p2, added, removed): - if p1 in self._mancache: + if p1 in self._mancache and not self._usetreemanifest: # If our first parent is in the manifest cache, we can # compute a delta here using properties we know about the # manifest up-front, which may save time later for the