##// END OF EJS Templates
manifest: add treemanifestctx class...
Durham Goode -
r29907:4fb4fc33 default
parent child Browse files
Show More
@@ -946,22 +946,20 b' class manifestlog(object):'
946 946 """Retrieves the manifest instance for the given node. Throws a KeyError
947 947 if not found.
948 948 """
949 if (self._oldmanifest._treeondisk
950 or self._oldmanifest._treeinmem):
951 # TODO: come back and support tree manifests directly
952 return self._oldmanifest.read(node)
953
954 if node == revlog.nullid:
955 return manifestdict()
956 949 if node in self._mancache:
957 950 cachemf = self._mancache[node]
958 951 # The old manifest may put non-ctx manifests in the cache, so skip
959 952 # those since they don't implement the full api.
960 if isinstance(cachemf, manifestctx):
953 if (isinstance(cachemf, manifestctx) or
954 isinstance(cachemf, treemanifestctx)):
961 955 return cachemf
962 956
963 m = manifestctx(self._revlog, node)
964 self._mancache[node] = m
957 if self._oldmanifest._treeinmem:
958 m = treemanifestctx(self._revlog, '', node)
959 else:
960 m = manifestctx(self._revlog, node)
961 if node != revlog.nullid:
962 self._mancache[node] = m
965 963 return m
966 964
967 965 class manifestctx(manifestdict):
@@ -972,9 +970,13 b' class manifestctx(manifestdict):'
972 970 self._revlog = revlog
973 971
974 972 self._node = node
975 self.p1, self.p2 = revlog.parents(node)
976 rev = revlog.rev(node)
977 self.linkrev = revlog.linkrev(rev)
973
974 # TODO: We eventually want p1, p2, and linkrev exposed on this class,
975 # but let's add it later when something needs it and we can load it
976 # lazily.
977 #self.p1, self.p2 = revlog.parents(node)
978 #rev = revlog.rev(node)
979 #self.linkrev = revlog.linkrev(rev)
978 980
979 981 # This should eventually be made lazy loaded, so consumers can access
980 982 # the node/p1/linkrev data without having to parse the whole manifest.
@@ -986,6 +988,38 b' class manifestctx(manifestdict):'
986 988 def node(self):
987 989 return self._node
988 990
991 class treemanifestctx(treemanifest):
992 def __init__(self, revlog, dir, node):
993 revlog = revlog.dirlog(dir)
994 self._revlog = revlog
995 self._dir = dir
996
997 self._node = node
998
999 # TODO: Load p1/p2/linkrev lazily. They need to be lazily loaded so that
1000 # we can instantiate treemanifestctx objects for directories we don't
1001 # have on disk.
1002 #self.p1, self.p2 = revlog.parents(node)
1003 #rev = revlog.rev(node)
1004 #self.linkrev = revlog.linkrev(rev)
1005
1006 if revlog._treeondisk:
1007 super(treemanifestctx, self).__init__(dir=dir)
1008 def gettext():
1009 return revlog.revision(node)
1010 def readsubtree(dir, subm):
1011 return revlog.dirlog(dir).read(subm)
1012 self.read(gettext, readsubtree)
1013 self.setnode(node)
1014 else:
1015 text = revlog.revision(node)
1016 arraytext = array.array('c', text)
1017 revlog.fulltextcache[node] = arraytext
1018 super(treemanifestctx, self).__init__(dir=dir, text=text)
1019
1020 def node(self):
1021 return self._node
1022
989 1023 class manifest(manifestrevlog):
990 1024 def __init__(self, opener, dir='', dirlogcache=None):
991 1025 '''The 'dir' and 'dirlogcache' arguments are for internal use by
General Comments 0
You need to be logged in to leave comments. Login now