diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-12-07 22:23:57 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-12-07 22:23:57 +0000 |
commit | 70ba8f079933e40497649c419898bb2b2e1ce81d (patch) | |
tree | bde23876c74077f2c50e58a39f3d3c96a8550367 | |
parent | e32ddbb0b19dbe110faee7f516756e3753cdb270 (diff) | |
download | portage-70ba8f079933e40497649c419898bb2b2e1ce81d.tar.gz portage-70ba8f079933e40497649c419898bb2b2e1ce81d.tar.bz2 portage-70ba8f079933e40497649c419898bb2b2e1ce81d.zip |
Enable FakeVartree to populate the virtuals so that the vdb doesn't have to be scanned separately.
svn path=/main/trunk/; revision=5207
-rwxr-xr-x | bin/emerge | 11 | ||||
-rw-r--r-- | pym/portage.py | 8 |
2 files changed, 10 insertions, 9 deletions
diff --git a/bin/emerge b/bin/emerge index 44a9a6f80..88dea39c5 100755 --- a/bin/emerge +++ b/bin/emerge @@ -699,7 +699,7 @@ class DepPriority(object): return "medium" return "soft" -class FakeVartree(object): +class FakeVartree(portage.vartree): """This is implements an in-memory copy of a vartree instance that provides all the interfaces required for use by the depgraph. The vardb is locked during the constructor call just long enough to read a copy of the @@ -718,7 +718,8 @@ class FakeVartree(object): try: if os.access(vdb_path, os.W_OK): vdb_lock = portage_locks.lockdir(vdb_path) - mykeys = ["SLOT", "USE", "IUSE", "DEPEND", "RDEPEND", "PDEPEND"] + mykeys = ["SLOT", "PROVIDE", "USE", "IUSE", + "DEPEND", "RDEPEND", "PDEPEND"] real_dbapi = real_vartree.dbapi for cpv in real_dbapi.cpv_all(): metadata = dict(zip(mykeys, real_dbapi.aux_get(cpv, mykeys))) @@ -726,6 +727,10 @@ class FakeVartree(object): finally: if vdb_lock: portage_locks.unlockdir(vdb_lock) + # Populate the old-style virtuals using the cached values. + if not self.settings.treeVirtuals: + self.settings.treeVirtuals = portage_util.map_dictlist_vals( + portage.getCPFromCPV, self.get_all_provides()) class depgraph: @@ -752,8 +757,6 @@ class depgraph: self.trees[myroot][tree] = trees[myroot][tree] self.trees[myroot]["vartree"] = \ FakeVartree(trees[myroot]["vartree"]) - # Make sure the virtuals are populated before cloning. - trees[myroot]["vartree"].settings.getvirtuals() self.pkgsettings[myroot] = portage.config( clone=self.trees[myroot]["vartree"].settings) self.pkg_node_map[myroot] = {} diff --git a/pym/portage.py b/pym/portage.py index 9881d227d..13c851ab0 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -1853,7 +1853,7 @@ class config: self.dirVirtuals[virt].reverse() # Repoman does not use user or tree virtuals. - if self.local_config: + if self.local_config and not self.treeVirtuals: temp_vartree = vartree(myroot, None, categories=self.categories, settings=self) # Reduce the provides into a list by CP. @@ -4930,11 +4930,9 @@ class vartree(packagetree): def get_provide(self,mycpv): myprovides=[] try: - mylines = grabfile(self.root+VDB_PATH+"/"+mycpv+"/PROVIDE") + mylines, myuse = self.dbapi.aux_get(mycpv, ["PROVIDE","USE"]) if mylines: - myuse = grabfile(self.root+VDB_PATH+"/"+mycpv+"/USE") - myuse = string.split(string.join(myuse)) - mylines = string.join(mylines) + myuse = myuse.split() mylines = flatten(portage_dep.use_reduce(portage_dep.paren_reduce(mylines), uselist=myuse)) for myprovide in mylines: mys = catpkgsplit(myprovide) |