summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/pym/portage.py b/pym/portage.py
index 5aca71a91..3becb1b9b 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -6574,9 +6574,29 @@ def getvirtuals(myroot):
return settings.getvirtuals(myroot)
def do_vartree(mysettings):
- db["/"] = {"vartree":vartree("/")}
+ class LazyVirtualsDict(dict):
+ def __init__(self, myroot):
+ super(LazyVirtualsDict, self).__init__()
+ self.myroot = myroot
+ self["virtuals"] = None
+ def __getitem__(self, key):
+ if "virtuals" == key:
+ if "virtuals" in self:
+ virtuals = super(LazyVirtualsDict, self).__getitem__("virtuals")
+ if virtuals is not None:
+ return virtuals
+ else:
+ global settings
+ virtuals = settings.getvirtuals(self.myroot)
+ self["virtuals"] = virtuals
+ return virtuals
+ return super(LazyVirtualsDict, self).__getitem__(key)
+ global db, root
+ db["/"] = LazyVirtualsDict("/")
+ db["/"]["vartree"] = vartree("/")
if root!="/":
- db[root] = {"vartree":vartree(root)}
+ db[root] = LazyVirtualsDict(root)
+ db[root]["vartree"] = vartree(root)
#We need to create the vartree first, then load our settings, and then set up our other trees
usedefaults=settings.use_defs