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() |