991 arraytext = array.array('c', text) |
991 arraytext = array.array('c', text) |
992 self._revlog._fulltextcache[self._node] = arraytext |
992 self._revlog._fulltextcache[self._node] = arraytext |
993 self._data = manifestdict(text) |
993 self._data = manifestdict(text) |
994 return self._data |
994 return self._data |
995 |
995 |
|
996 def readdelta(self): |
|
997 revlog = self._revlog |
|
998 if revlog._usemanifestv2: |
|
999 # Need to perform a slow delta |
|
1000 r0 = revlog.deltaparent(revlog.rev(self._node)) |
|
1001 m0 = manifestctx(revlog, revlog.node(r0)).read() |
|
1002 m1 = self.read() |
|
1003 md = manifestdict() |
|
1004 for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems(): |
|
1005 if n1: |
|
1006 md[f] = n1 |
|
1007 if fl1: |
|
1008 md.setflag(f, fl1) |
|
1009 return md |
|
1010 |
|
1011 r = revlog.rev(self._node) |
|
1012 d = mdiff.patchtext(revlog.revdiff(revlog.deltaparent(r), r)) |
|
1013 return manifestdict(d) |
|
1014 |
996 class treemanifestctx(object): |
1015 class treemanifestctx(object): |
997 def __init__(self, revlog, dir, node): |
1016 def __init__(self, revlog, dir, node): |
998 revlog = revlog.dirlog(dir) |
1017 revlog = revlog.dirlog(dir) |
999 self._revlog = revlog |
1018 self._revlog = revlog |
1000 self._dir = dir |
1019 self._dir = dir |
1030 |
1049 |
1031 return self._data |
1050 return self._data |
1032 |
1051 |
1033 def node(self): |
1052 def node(self): |
1034 return self._node |
1053 return self._node |
|
1054 |
|
1055 def readdelta(self): |
|
1056 # Need to perform a slow delta |
|
1057 revlog = self._revlog |
|
1058 r0 = revlog.deltaparent(revlog.rev(self._node)) |
|
1059 m0 = treemanifestctx(revlog, revlog.node(r0), dir=self._dir).read() |
|
1060 m1 = self.read() |
|
1061 md = treemanifest(dir=self._dir) |
|
1062 for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems(): |
|
1063 if n1: |
|
1064 md[f] = n1 |
|
1065 if fl1: |
|
1066 md.setflag(f, fl1) |
|
1067 return md |
1035 |
1068 |
1036 class manifest(manifestrevlog): |
1069 class manifest(manifestrevlog): |
1037 def __init__(self, opener, dir='', dirlogcache=None): |
1070 def __init__(self, opener, dir='', dirlogcache=None): |
1038 '''The 'dir' and 'dirlogcache' arguments are for internal use by |
1071 '''The 'dir' and 'dirlogcache' arguments are for internal use by |
1039 manifest.manifest only. External users should create a root manifest |
1072 manifest.manifest only. External users should create a root manifest |