mercurial/manifest.py
changeset 29938 a059b17352ef
parent 29926 be16091ac14d
child 29939 80be4436e4cc
equal deleted inserted replaced
29937:2c302c654451 29938:a059b17352ef
   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