1505 usetreemanifest = opts.get('treemanifest', usetreemanifest) |
1505 usetreemanifest = opts.get('treemanifest', usetreemanifest) |
1506 cachesize = opts.get('manifestcachesize', cachesize) |
1506 cachesize = opts.get('manifestcachesize', cachesize) |
1507 |
1507 |
1508 self._treemanifests = usetreemanifest |
1508 self._treemanifests = usetreemanifest |
1509 |
1509 |
1510 self._revlog = repo._constructmanifest() |
1510 self._rootstore = repo._constructmanifest() |
1511 self._revlog._setupmanifestcachehooks(repo) |
1511 self._rootstore._setupmanifestcachehooks(repo) |
1512 self._narrowmatch = repo.narrowmatch() |
1512 self._narrowmatch = repo.narrowmatch() |
1513 |
1513 |
1514 # A cache of the manifestctx or treemanifestctx for each directory |
1514 # A cache of the manifestctx or treemanifestctx for each directory |
1515 self._dirmancache = {} |
1515 self._dirmancache = {} |
1516 self._dirmancache[''] = util.lrucachedict(cachesize) |
1516 self._dirmancache[''] = util.lrucachedict(cachesize) |
1535 |
1535 |
1536 if not self._narrowmatch.always(): |
1536 if not self._narrowmatch.always(): |
1537 if not self._narrowmatch.visitdir(tree[:-1] or '.'): |
1537 if not self._narrowmatch.visitdir(tree[:-1] or '.'): |
1538 return excludeddirmanifestctx(tree, node) |
1538 return excludeddirmanifestctx(tree, node) |
1539 if tree: |
1539 if tree: |
1540 if self._revlog._treeondisk: |
1540 if self._rootstore._treeondisk: |
1541 if verify: |
1541 if verify: |
1542 # Side-effect is LookupError is raised if node doesn't |
1542 # Side-effect is LookupError is raised if node doesn't |
1543 # exist. |
1543 # exist. |
1544 self.getstorage(tree).rev(node) |
1544 self.getstorage(tree).rev(node) |
1545 |
1545 |
1549 _("cannot ask for manifest directory '%s' in a flat " |
1549 _("cannot ask for manifest directory '%s' in a flat " |
1550 "manifest") % tree) |
1550 "manifest") % tree) |
1551 else: |
1551 else: |
1552 if verify: |
1552 if verify: |
1553 # Side-effect is LookupError is raised if node doesn't exist. |
1553 # Side-effect is LookupError is raised if node doesn't exist. |
1554 self._revlog.rev(node) |
1554 self._rootstore.rev(node) |
1555 |
1555 |
1556 if self._treemanifests: |
1556 if self._treemanifests: |
1557 m = treemanifestctx(self, '', node) |
1557 m = treemanifestctx(self, '', node) |
1558 else: |
1558 else: |
1559 m = manifestctx(self, node) |
1559 m = manifestctx(self, node) |
1565 self._dirmancache[tree] = mancache |
1565 self._dirmancache[tree] = mancache |
1566 mancache[node] = m |
1566 mancache[node] = m |
1567 return m |
1567 return m |
1568 |
1568 |
1569 def getstorage(self, tree): |
1569 def getstorage(self, tree): |
1570 return self._revlog.dirlog(tree) |
1570 return self._rootstore.dirlog(tree) |
1571 |
1571 |
1572 def clearcaches(self, clear_persisted_data=False): |
1572 def clearcaches(self, clear_persisted_data=False): |
1573 self._dirmancache.clear() |
1573 self._dirmancache.clear() |
1574 self._revlog.clearcaches(clear_persisted_data=clear_persisted_data) |
1574 self._rootstore.clearcaches(clear_persisted_data=clear_persisted_data) |
1575 |
1575 |
1576 def rev(self, node): |
1576 def rev(self, node): |
1577 return self._revlog.rev(node) |
1577 return self._rootstore.rev(node) |
1578 |
1578 |
1579 @interfaceutil.implementer(repository.imanifestrevisionwritable) |
1579 @interfaceutil.implementer(repository.imanifestrevisionwritable) |
1580 class memmanifestctx(object): |
1580 class memmanifestctx(object): |
1581 def __init__(self, manifestlog): |
1581 def __init__(self, manifestlog): |
1582 self._manifestlog = manifestlog |
1582 self._manifestlog = manifestlog |