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

Unified Diff: parallel_emerge

Issue 3304010: Update parallel_emerge to restart after upgrading portage in root. (Closed) Base URL: http://git.chromium.org/git/crosutils.git
Patch Set: More comments Created 10 years, 4 months 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 192cb8afbf9b5906c848e0d2a11e28569c88a66f..ae02a14b252145050de4a6cd8319c1338e0c32b5 100755
--- a/parallel_emerge
+++ b/parallel_emerge
@@ -217,13 +217,14 @@ class DepGraphGenerator(object):
"""
__slots__ = ["board", "emerge", "mandatory_source", "no_workon_deps",
- "package_db", "rebuild", "show_output"]
+ "nomerge", "package_db", "rebuild", "show_output"]
def __init__(self):
self.board = None
self.emerge = EmergeData()
self.mandatory_source = set()
self.no_workon_deps = False
+ self.nomerge = set()
self.package_db = {}
self.rebuild = False
self.show_output = False
@@ -249,6 +250,10 @@ class DepGraphGenerator(object):
workon_str = arg.replace("--workon=", "")
package_list = shlex.split(" ".join(shlex.split(workon_str)))
self.mandatory_source.update(package_list)
+ elif arg.startswith("--nomerge="):
+ nomerge_str = arg.replace("--nomerge=", "")
+ package_list = shlex.split(" ".join(shlex.split(nomerge_str)))
+ self.nomerge.update(package_list)
elif arg == "--no-workon-deps":
self.no_workon_deps = True
elif arg == "--rebuild":
@@ -775,6 +780,12 @@ class DepGraphGenerator(object):
if info["optional"]:
rm_pkgs.add(pkg)
+ # Schedule nomerge packages for removal
+ for pkg in self.nomerge:
+ for db_pkg in final_db.match_pkgs(pkg):
+ if db_pkg.cpv in deps_map:
+ rm_pkgs.add(str(db_pkg.cpv))
+
# Remove the packages we don't want, simplifying the graph and making
# it easier for us to crack cycles.
for pkg in sorted(rm_pkgs):
@@ -1611,9 +1622,13 @@ def main():
if "--quiet" not in emerge.opts:
cmdline_packages = " ".join(emerge.cmdline_packages)
+ nomerge_packages = " ".join(deps.nomerge)
print "Starting fast-emerge."
print " Building package %s on %s" % (cmdline_packages,
deps.board or "root")
+ if nomerge_packages:
+ print " Skipping package %s on %s" % (nomerge_packages,
+ deps.board or "root")
deps_tree, deps_info = deps.GenDependencyTree()
@@ -1628,6 +1643,22 @@ def main():
if "--tree" in emerge.opts:
PrintDepsMap(deps_graph)
+ # Are we upgrading portage? If so, and there are more packages to merge,
+ # schedule a restart of parallel_emerge to merge the rest. This ensures that
+ # we pick up all updates to portage settings before merging any more
+ # packages.
+ portage_upgrade = False
+ root = emerge.settings["ROOT"]
+ final_db = emerge.depgraph._dynamic_config.mydbapi[root]
+ if root == "/":
+ for db_pkg in final_db.match_pkgs("sys-apps/portage"):
+ portage_pkg = deps_graph.get(db_pkg.cpv)
+ if portage and len(deps_graph) > 1:
+ deps_graph = { str(db_pkg.cpv): portage_pkg }
+ portage_upgrade = True
+ if "--quiet" not in emerge.opts:
+ print "Upgrading portage first, then restarting..."
+
# Run the queued emerges.
scheduler = EmergeQueue(deps_graph, emerge, deps.package_db, deps.show_output)
scheduler.Run()
@@ -1637,8 +1668,6 @@ def main():
"--pretend" not in emerge.opts):
world_set = emerge.root_config.sets["selected"]
new_world_pkgs = []
- root = emerge.settings["ROOT"]
- final_db = emerge.depgraph._dynamic_config.mydbapi[root]
for pkg in emerge.cmdline_packages:
for db_pkg in final_db.match_pkgs(pkg):
print "Adding %s to world" % db_pkg.cp
@@ -1650,6 +1679,12 @@ def main():
if deps.board and "--pretend" not in emerge.opts:
portage.env_update()
+ # If we already upgraded portage, we don't need to do so again. But we do
+ # need to upgrade the rest of the packages. So we'll go ahead and do that.
+ if portage_upgrade:
+ args = sys.argv[1:] + ["--nomerge=sys-apps/portage"]
+ os.execvp(os.path.realpath(sys.argv[0]), args)
+
print "Done"
if __name__ == "__main__":
« 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