From 0c8fc90cb2f0101f60a78953668b391e44d3cdca Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 9 Jun 2008 13:55:06 +0000 Subject: 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 ` * `portageq owners` The svn path=/main/trunk/; revision=10609 --- bin/portageq | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) (limited to 'bin') diff --git a/bin/portageq b/bin/portageq index c3fe8b37d..fe5260bc0 100755 --- a/bin/portageq +++ b/bin/portageq @@ -188,26 +188,21 @@ def owners(argv): return 2 files.append(f[len(root):]) - found_owner = False - for cpv in vardb.cpv_all(): - cat, pkg = catsplit(cpv) - mylink = dblink(cat, pkg, root, settings, vartree=vardb.vartree) - myfiles = [] - for f in files: - if mylink.isowner(f, root): - myfiles.append(f) - if myfiles: - found_owner = True - sys.stdout.write("%s\n" % cpv) - for f in myfiles: - sys.stdout.write("\t%s\n" % \ - os.path.join(root, f.lstrip(os.path.sep))) - sys.stdout.flush() - if not found_owner: - sys.stderr.write("None of the installed packages claim the file(s).\n") - sys.stderr.flush() - return 1 - return 0 + owners = vardb._owners.get_owners(files) + + for pkg, owned_files in owners.iteritems(): + cpv = pkg.mycpv + sys.stdout.write("%s\n" % cpv) + for f in sorted(owned_files): + sys.stdout.write("\t%s\n" % \ + os.path.join(root, f.lstrip(os.path.sep))) + if owners: + sys.stdout.flush() + return 0 + + sys.stderr.write("None of the installed packages claim the file(s).\n") + sys.stderr.flush() + return 1 owners.uses_root = True -- cgit v1.2.3-1-g7c22