mercurial/manifest.py
branchstable
changeset 30221 f2c5b9d48b29
parent 30220 acc8885a6450
child 30290 1a0c1ad57833
equal deleted inserted replaced
30220:acc8885a6450 30221:f2c5b9d48b29
  1272             if (isinstance(cachemf, manifestctx) or
  1272             if (isinstance(cachemf, manifestctx) or
  1273                 isinstance(cachemf, treemanifestctx)):
  1273                 isinstance(cachemf, treemanifestctx)):
  1274                 return cachemf
  1274                 return cachemf
  1275 
  1275 
  1276         if self._treeinmem:
  1276         if self._treeinmem:
  1277             m = treemanifestctx(self._revlog, '', node)
  1277             m = treemanifestctx(self._repo, '', node)
  1278         else:
  1278         else:
  1279             m = manifestctx(self._repo, node)
  1279             m = manifestctx(self._repo, node)
  1280         if node != revlog.nullid:
  1280         if node != revlog.nullid:
  1281             self._mancache[node] = m
  1281             self._mancache[node] = m
  1282         return m
  1282         return m
  1342         r = revlog.rev(self._node)
  1342         r = revlog.rev(self._node)
  1343         d = mdiff.patchtext(revlog.revdiff(revlog.deltaparent(r), r))
  1343         d = mdiff.patchtext(revlog.revdiff(revlog.deltaparent(r), r))
  1344         return manifestdict(d)
  1344         return manifestdict(d)
  1345 
  1345 
  1346 class treemanifestctx(object):
  1346 class treemanifestctx(object):
  1347     def __init__(self, revlog, dir, node):
  1347     def __init__(self, repo, dir, node):
  1348         revlog = revlog.dirlog(dir)
  1348         self._repo = repo
  1349         self._revlog = revlog
       
  1350         self._dir = dir
  1349         self._dir = dir
  1351         self._data = None
  1350         self._data = None
  1352 
  1351 
  1353         self._node = node
  1352         self._node = node
  1354 
  1353 
  1357         # have on disk.
  1356         # have on disk.
  1358         #self.p1, self.p2 = revlog.parents(node)
  1357         #self.p1, self.p2 = revlog.parents(node)
  1359         #rev = revlog.rev(node)
  1358         #rev = revlog.rev(node)
  1360         #self.linkrev = revlog.linkrev(rev)
  1359         #self.linkrev = revlog.linkrev(rev)
  1361 
  1360 
       
  1361     def _revlog(self):
       
  1362         return self._repo.manifestlog._revlog.dirlog(self._dir)
       
  1363 
  1362     def read(self):
  1364     def read(self):
  1363         if not self._data:
  1365         if not self._data:
       
  1366             rl = self._revlog()
  1364             if self._node == revlog.nullid:
  1367             if self._node == revlog.nullid:
  1365                 self._data = treemanifest()
  1368                 self._data = treemanifest()
  1366             elif self._revlog._treeondisk:
  1369             elif rl._treeondisk:
  1367                 m = treemanifest(dir=self._dir)
  1370                 m = treemanifest(dir=self._dir)
  1368                 def gettext():
  1371                 def gettext():
  1369                     return self._revlog.revision(self._node)
  1372                     return rl.revision(self._node)
  1370                 def readsubtree(dir, subm):
  1373                 def readsubtree(dir, subm):
  1371                     return treemanifestctx(self._revlog, dir, subm).read()
  1374                     return treemanifestctx(self._repo, dir, subm).read()
  1372                 m.read(gettext, readsubtree)
  1375                 m.read(gettext, readsubtree)
  1373                 m.setnode(self._node)
  1376                 m.setnode(self._node)
  1374                 self._data = m
  1377                 self._data = m
  1375             else:
  1378             else:
  1376                 text = self._revlog.revision(self._node)
  1379                 text = revlog.revision(self._node)
  1377                 arraytext = array.array('c', text)
  1380                 arraytext = array.array('c', text)
  1378                 self._revlog.fulltextcache[self._node] = arraytext
  1381                 rl.fulltextcache[self._node] = arraytext
  1379                 self._data = treemanifest(dir=self._dir, text=text)
  1382                 self._data = treemanifest(dir=self._dir, text=text)
  1380 
  1383 
  1381         return self._data
  1384         return self._data
  1382 
  1385 
  1383     def node(self):
  1386     def node(self):
  1384         return self._node
  1387         return self._node
  1385 
  1388 
  1386     def readdelta(self):
  1389     def readdelta(self):
  1387         # Need to perform a slow delta
  1390         # Need to perform a slow delta
  1388         revlog = self._revlog
  1391         revlog = self._revlog()
  1389         r0 = revlog.deltaparent(revlog.rev(self._node))
  1392         r0 = revlog.deltaparent(revlog.rev(self._node))
  1390         m0 = treemanifestctx(revlog, self._dir, revlog.node(r0)).read()
  1393         m0 = treemanifestctx(self._repo, self._dir, revlog.node(r0)).read()
  1391         m1 = self.read()
  1394         m1 = self.read()
  1392         md = treemanifest(dir=self._dir)
  1395         md = treemanifest(dir=self._dir)
  1393         for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
  1396         for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
  1394             if n1:
  1397             if n1:
  1395                 md[f] = n1
  1398                 md[f] = n1
  1396                 if fl1:
  1399                 if fl1:
  1397                     md.setflag(f, fl1)
  1400                     md.setflag(f, fl1)
  1398         return md
  1401         return md
  1399 
  1402 
  1400     def readfast(self):
  1403     def readfast(self):
  1401         rl = self._revlog
  1404         rl = self._revlog()
  1402         r = rl.rev(self._node)
  1405         r = rl.rev(self._node)
  1403         deltaparent = rl.deltaparent(r)
  1406         deltaparent = rl.deltaparent(r)
  1404         if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):
  1407         if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):
  1405             return self.readdelta()
  1408             return self.readdelta()
  1406         return self.read()
  1409         return self.read()