Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: parallel_emerge

Issue 4552007: Update parallel_emerge to correct use flags, fixing a regression. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: parallel_emerge
diff --git a/parallel_emerge b/parallel_emerge
index c1667134c09bb43dc0f0e09f3cbb80afdc095a30..ab342334c2e1d4e7a766d81e95fc2e123b46a888 100755
--- a/parallel_emerge
+++ b/parallel_emerge
@@ -464,7 +464,6 @@ class DepGraphGenerator(object):
forced_flags = set(pkgsettings.useforce).union(pkgsettings.usemask)
depgraph = self.emerge.depgraph
-
flags = depgraph._reinstall_for_flags(forced_flags, cur_use,
cur_iuse, now_use, now_iuse)
return not flags
@@ -488,21 +487,21 @@ class DepGraphGenerator(object):
# --workon and the dependencies have changed.
emerge = self.emerge
emerge_opts = emerge.opts.copy()
- if self.mandatory_source or self.rebuild or self.force_remote_binary:
- # Enable --emptytree so that we get the full tree, which we need for
- # dependency analysis. By default, with this option, emerge optimizes
- # the graph by removing uninstall instructions from the graph. By
- # specifying --tree as well, we tell emerge that it's not safe to remove
- # uninstall instructions because we're planning on analyzing the output.
- emerge_opts["--tree"] = True
- emerge_opts["--emptytree"] = True
-
- # Tell emerge not to worry about use flags yet. We handle those inside
- # parallel_emerge itself. Further, when we use the --force-remote-binary
- # flag, we don't emerge to reject a package just because it has different
- # use flags.
- emerge_opts.pop("--newuse", None)
- emerge_opts.pop("--reinstall", None)
+
+ # Enable --emptytree so that we get the full tree, which we need for
+ # dependency analysis. By default, with this option, emerge optimizes
+ # the graph by removing uninstall instructions from the graph. By
+ # specifying --tree as well, we tell emerge that it's not safe to remove
+ # uninstall instructions because we're planning on analyzing the output.
+ emerge_opts["--tree"] = True
+ emerge_opts["--emptytree"] = True
+
+ # Tell emerge not to worry about use flags yet. We handle those inside
+ # parallel_emerge itself. Further, when we use the --force-remote-binary
+ # flag, we don't emerge to reject a package just because it has different
+ # use flags.
+ emerge_opts.pop("--newuse", None)
+ emerge_opts.pop("--reinstall", None)
# Create a list of packages to merge
packages = set(emerge.cmdline_packages[:])
@@ -593,9 +592,25 @@ class DepGraphGenerator(object):
frozen_config = depgraph._frozen_config
vardb = frozen_config.trees[root]["vartree"].dbapi
pkgsettings = frozen_config.pkgsettings[root]
+
+ # It's time to start worrying about use flags, if necessary.
+ for flag in ("--newuse", "--reinstall"):
+ if flag in emerge.opts:
+ emerge_opts[flag] = emerge.opts[flag]
+
deps_info = {}
for pkg in depgraph.altlist():
if isinstance(pkg, Package):
+ # If we're not using --force-remote-binary, check what flags are being
+ # used by the real package.
+ if "--usepkgonly" not in emerge.opts:
+ try:
+ pkg = emerge.depgraph._pkg(pkg.cpv, "ebuild", emerge.root_config)
+ except portage.exception.PackageNotFound:
+ # This is a --force-remote-binary package.
+ pass
+ self.package_db[pkg.cpv] = pkg
+
# If we're not in emptytree mode, and we're going to replace a package
# that is already installed, then this operation is possibly optional.
# ("--selective" mode is handled later, in RemoveInstalledPackages())
@@ -1149,9 +1164,7 @@ class DepGraphGenerator(object):
# Calculate what packages need to be rebuilt due to changes in use flags.
for pkg, db_pkg in prebuilt_pkgs.iteritems():
- db_pkg_src = self.package_db.get(pkg)
- if db_pkg_src and not self.CheckUseFlags(pkgsettings, db_pkg,
- db_pkg_src):
+ if not self.CheckUseFlags(pkgsettings, db_pkg, self.package_db[pkg]):
MergeChildren(pkg, "mandatory_source")
# Convert eligible packages to binaries.
@@ -1166,24 +1179,6 @@ class DepGraphGenerator(object):
return prebuilt_pkgs
- def AddRemainingPackages():
- """Fill in packages that don't have entries in the package db.
-
- Every package we are installing needs an entry in the package db.
- This function should only be called after we have removed the
- packages that are not being merged from our deps_map.
- """
- for pkg in deps_map:
- if pkg not in self.package_db:
- if deps_map[pkg]["action"] != "merge":
- # We should only fill in packages that are being merged. If
- # there's any other packages here, something funny is going on.
- print "Missing entry for %s in package db" % pkg
- sys.exit(1)
-
- db_pkg = emerge.depgraph._pkg(pkg, "ebuild", emerge.root_config)
- self.package_db[pkg] = db_pkg
-
ReverseTree(deps_tree)
BuildFinalPackageSet()
AddSecretDeps()
@@ -1223,7 +1218,6 @@ class DepGraphGenerator(object):
if deps_map:
if "--usepkg" in emerge.opts:
UsePrebuiltPackages(remote_pkgs)
- AddRemainingPackages()
return deps_map
def PrintInstallPlan(self, deps_map):
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698