From 09e6f3ac0f9c47dca05ca4c67bb952f03f038898 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 23 Aug 2007 08:11:14 +0000 Subject: [PATCH] Make depgraph.create() avoid metadata lookups for binary packages and ebuilds in cases where an installed package has already been added to the graph. This greatly improves performance when the graph contains a large number of installed packages. svn path=/main/trunk/; revision=7680 --- pym/emerge/__init__.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py index 6706dc0ce..e055ecee0 100644 --- a/pym/emerge/__init__.py +++ b/pym/emerge/__init__.py @@ -1743,16 +1743,19 @@ class depgraph(object): myeb_matches = portdb.xmatch("match-visible", x) myeb = None ebuild_merge_node = None + installed_node = None if myeb_matches and \ "--usepkgonly" not in self.myopts: myeb = portage.best(myeb_matches) ebuild_merge_node = ("ebuild", myroot, myeb, "merge") + installed_node = ("installed", myroot, myeb, "nomerge") myeb_pkg=None binary_merge_node = None if "--usepkg" in self.myopts and \ not (ebuild_merge_node and \ - self.digraph.contains(ebuild_merge_node)): + (self.digraph.contains(ebuild_merge_node) or \ + self.digraph.contains(installed_node))): # The next line assumes the binarytree has been populated. # XXX: Need to work out how we use the binary tree with roots. myeb_pkg_matches = bindb.match(x) @@ -1802,17 +1805,23 @@ class depgraph(object): if "--usepkgonly" not in self.myopts and myeb_matches: mydb = portdb + mytype = "ebuild" if self.digraph.contains(ebuild_merge_node) and \ ebuild_merge_node not in self._slot_collision_nodes: # reuse cached metadata mydb = self.mydbapi[myroot] + elif self.digraph.contains(installed_node) and \ + installed_node not in self._slot_collision_nodes: + # reuse cached metadata + mydb = self.mydbapi[myroot] + mytype = "installed" metadata = dict(izip(self._mydbapi_keys, mydb.aux_get(myeb, self._mydbapi_keys))) if mydb is portdb: pkgsettings.setcpv(myeb, mydb=portdb) metadata["USE"] = pkgsettings["USE"] matched_packages.append( - (["ebuild", myroot, myeb], metadata)) + ([mytype, myroot, myeb], metadata)) if not matched_packages and \ not (arg and "selective" not in self.myparams): -- 2.26.2