| 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):
|
|
|