comparison mercurial/manifest.py @ 24701:03ee576784e6

treemanifest: separate flags for trees in memory and trees on disk When we start writing tree manifests with one manifest revlog per directory, it will still be nice to be able to run tests using tree manifests in memory but writing to a flat manifest to a single revlog. Let's break the current '_usetreemanifest' flag on the revlog into '_treeinmem' and '_treeondisk'. Both are populated from the same config, but after this change, one can temporarily hard-code _treeinmem=True to see that tests still pass.
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 10 Apr 2015 18:54:33 -0700
parents 32b268cbff00
children 4ea521b3c554
comparison
equal deleted inserted replaced
24700:32b268cbff00 24701:03ee576784e6
759 cachesize = opts.get('manifestcachesize', cachesize) 759 cachesize = opts.get('manifestcachesize', cachesize)
760 usetreemanifest = opts.get('usetreemanifest', usetreemanifest) 760 usetreemanifest = opts.get('usetreemanifest', usetreemanifest)
761 usemanifestv2 = opts.get('manifestv2', usemanifestv2) 761 usemanifestv2 = opts.get('manifestv2', usemanifestv2)
762 self._mancache = util.lrucachedict(cachesize) 762 self._mancache = util.lrucachedict(cachesize)
763 revlog.revlog.__init__(self, opener, "00manifest.i") 763 revlog.revlog.__init__(self, opener, "00manifest.i")
764 self._usetreemanifest = usetreemanifest 764 self._treeinmem = usetreemanifest
765 self._treeondisk = usetreemanifest
765 self._usemanifestv2 = usemanifestv2 766 self._usemanifestv2 = usemanifestv2
766 767
767 def _newmanifest(self, data=''): 768 def _newmanifest(self, data=''):
768 if self._usetreemanifest: 769 if self._treeinmem:
769 return treemanifest('', data) 770 return treemanifest('', data)
770 return manifestdict(data) 771 return manifestdict(data)
771 772
772 def _slowreaddelta(self, node): 773 def _slowreaddelta(self, node):
773 r0 = self.deltaparent(self.rev(node)) 774 r0 = self.deltaparent(self.rev(node))
780 if fl1: 781 if fl1:
781 md.setflag(f, fl1) 782 md.setflag(f, fl1)
782 return md 783 return md
783 784
784 def readdelta(self, node): 785 def readdelta(self, node):
785 if self._usemanifestv2 or self._usetreemanifest: 786 if self._usemanifestv2 or self._treeondisk:
786 return self._slowreaddelta(node) 787 return self._slowreaddelta(node)
787 r = self.rev(node) 788 r = self.rev(node)
788 d = mdiff.patchtext(self.revdiff(self.deltaparent(r), r)) 789 d = mdiff.patchtext(self.revdiff(self.deltaparent(r), r))
789 return self._newmanifest(d) 790 return self._newmanifest(d)
790 791
815 return m.find(f) 816 return m.find(f)
816 except KeyError: 817 except KeyError:
817 return None, None 818 return None, None
818 819
819 def add(self, m, transaction, link, p1, p2, added, removed): 820 def add(self, m, transaction, link, p1, p2, added, removed):
820 if (p1 in self._mancache and not self._usetreemanifest 821 if (p1 in self._mancache and not self._treeinmem
821 and not self._usemanifestv2): 822 and not self._usemanifestv2):
822 # If our first parent is in the manifest cache, we can 823 # If our first parent is in the manifest cache, we can
823 # compute a delta here using properties we know about the 824 # compute a delta here using properties we know about the
824 # manifest up-front, which may save time later for the 825 # manifest up-front, which may save time later for the
825 # revlog layer. 826 # revlog layer.