summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/__init__.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-06-09 13:55:06 +0000
committerZac Medico <zmedico@gentoo.org>2008-06-09 13:55:06 +0000
commit0c8fc90cb2f0101f60a78953668b391e44d3cdca (patch)
treee1420607f8c3ac05f28f7bb05714aa825566658f /pym/_emerge/__init__.py
parent105076fd745b6f93907d403aa768432395b71230 (diff)
downloadportage-0c8fc90cb2f0101f60a78953668b391e44d3cdca.tar.gz
portage-0c8fc90cb2f0101f60a78953668b391e44d3cdca.tar.bz2
portage-0c8fc90cb2f0101f60a78953668b391e44d3cdca.zip
Add CONTENTS indexing support for optimization of owner lookups. The
vardbapi cache maintains a hash table (inside vdb_metadata.pickle) that serves to index package contents by mapping the basename of file to a list of possible packages that own it. This is used to optimize owner lookups by narrowing the search down to a smaller number of packages. It increases the size of vdb_metadata.pickle by approximately 30% and it's used in the following cases: * When an unexpected file collision occurs (whether or not collision-protect is enabled) * `emerge <filename>` * `portageq owners` The svn path=/main/trunk/; revision=10609
Diffstat (limited to 'pym/_emerge/__init__.py')
-rw-r--r--pym/_emerge/__init__.py15
1 files changed, 6 insertions, 9 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 520a86104..68f976cbe 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -2560,6 +2560,7 @@ class depgraph(object):
myroot = self.target_root
dbs = self._filtered_trees[myroot]["dbs"]
vardb = self.trees[myroot]["vartree"].dbapi
+ real_vardb = self._trees_orig[myroot]["vartree"].dbapi
portdb = self.trees[myroot]["porttree"].dbapi
bindb = self.trees[myroot]["bintree"].dbapi
pkgsettings = self.pkgsettings[myroot]
@@ -2638,16 +2639,12 @@ class depgraph(object):
" $ROOT.\n") % x, noiselevel=-1)
return 0, []
relative_path = x[len(myroot):]
- vartree = self._trees_orig[myroot]["vartree"]
owner_cpv = None
- for cpv in vardb.cpv_all():
- self.spinner.update()
- cat, pf = portage.catsplit(cpv)
- if portage.dblink(cat, pf, myroot,
- pkgsettings, vartree=vartree).isowner(
- relative_path, myroot):
- owner_cpv = cpv
- break
+ for pkg, relative_path in \
+ real_vardb._owners.iter_owners([relative_path]):
+ owner_cpv = pkg.mycpv
+ break
+
if owner_cpv is None:
portage.writemsg(("\n\n!!! '%s' is not claimed " + \
"by any package.\n") % x, noiselevel=-1)