##// END OF EJS Templates
treemanifest: cache directory logs and manifests...
Martin von Zweigbergk -
r25185:bf6b476f default
parent child Browse files
Show More
@@ -461,7 +461,7 b' class localrepository(object):'
461 461 return manifest.manifest(self.svfs)
462 462
463 463 def dirlog(self, dir):
464 return manifest.manifest(self.svfs, dir)
464 return self.manifest.dirlog(dir)
465 465
466 466 @repofilecache('dirstate')
467 467 def dirstate(self):
@@ -796,7 +796,11 b' class treemanifest(object):'
796 796 writesubtree(subm, subp1, subp2)
797 797
798 798 class manifest(revlog.revlog):
799 def __init__(self, opener, dir=''):
799 def __init__(self, opener, dir='', dirlogcache=None):
800 '''The 'dir' and 'dirlogcache' arguments are for internal use by
801 manifest.manifest only. External users should create a root manifest
802 log with manifest.manifest(opener) and call dirlog() on it.
803 '''
800 804 # During normal operations, we expect to deal with not more than four
801 805 # revs at a time (such as during commit --amend). When rebasing large
802 806 # stacks of commits, the number can go up, hence the config knob below.
@@ -820,12 +824,24 b' class manifest(revlog.revlog):'
820 824 indexfile = "meta/" + dir + "00manifest.i"
821 825 revlog.revlog.__init__(self, opener, indexfile)
822 826 self._dir = dir
827 # The dirlogcache is kept on the root manifest log
828 if dir:
829 self._dirlogcache = dirlogcache
830 else:
831 self._dirlogcache = {'': self}
823 832
824 833 def _newmanifest(self, data=''):
825 834 if self._treeinmem:
826 835 return treemanifest(self._dir, data)
827 836 return manifestdict(data)
828 837
838 def dirlog(self, dir):
839 assert self._treeondisk
840 if dir not in self._dirlogcache:
841 self._dirlogcache[dir] = manifest(self.opener, dir,
842 self._dirlogcache)
843 return self._dirlogcache[dir]
844
829 845 def _slowreaddelta(self, node):
830 846 r0 = self.deltaparent(self.rev(node))
831 847 m0 = self.read(self.node(r0))
@@ -867,8 +883,7 b' class manifest(revlog.revlog):'
867 883 text = self.revision(node)
868 884 if self._treeondisk:
869 885 def readsubtree(dir, subm):
870 sublog = manifest(self.opener, dir)
871 return sublog.read(subm)
886 return self.dirlog(dir).read(subm)
872 887 m = self._newmanifest()
873 888 m.parse(text, readsubtree)
874 889 m.setnode(node)
@@ -929,7 +944,7 b' class manifest(revlog.revlog):'
929 944
930 945 def _addtree(self, m, transaction, link, m1, m2):
931 946 def writesubtree(subm, subp1, subp2):
932 sublog = manifest(self.opener, subm.dir())
947 sublog = self.dirlog(subm.dir())
933 948 sublog.add(subm, transaction, link, subp1, subp2, None, None)
934 949 m.writesubtrees(m1, m2, writesubtree)
935 950 text = m.dirtext(self._usemanifestv2)
General Comments 0
You need to be logged in to leave comments. Login now