mirror of
https://github.com/flatcar/scripts.git
synced 2025-11-13 14:41:37 +01:00
Update parallel_emerge to restart after upgrading portage in root.
We had a build failure today because portage was upgraded, and
parallel_emerge did not restart after emerging portage. This resulted
in build breakage because parallel_emerge did not pick up all of the
changes (only some of them).
BUG=chromium-os:6394
TEST=Tested that parallel_emerge restarts after upgrading portage in root,
but not after upgrading portage in board.
Change-Id: I480dc2dc034afb5b9e0468ed6e4d16de608d3d32
Review URL: http://codereview.chromium.org/3304010
This commit is contained in:
parent
7de6531962
commit
a164ad46dd
@ -217,13 +217,14 @@ class DepGraphGenerator(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = ["board", "emerge", "mandatory_source", "no_workon_deps",
|
__slots__ = ["board", "emerge", "mandatory_source", "no_workon_deps",
|
||||||
"package_db", "rebuild", "show_output"]
|
"nomerge", "package_db", "rebuild", "show_output"]
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.board = None
|
self.board = None
|
||||||
self.emerge = EmergeData()
|
self.emerge = EmergeData()
|
||||||
self.mandatory_source = set()
|
self.mandatory_source = set()
|
||||||
self.no_workon_deps = False
|
self.no_workon_deps = False
|
||||||
|
self.nomerge = set()
|
||||||
self.package_db = {}
|
self.package_db = {}
|
||||||
self.rebuild = False
|
self.rebuild = False
|
||||||
self.show_output = False
|
self.show_output = False
|
||||||
@ -249,6 +250,10 @@ class DepGraphGenerator(object):
|
|||||||
workon_str = arg.replace("--workon=", "")
|
workon_str = arg.replace("--workon=", "")
|
||||||
package_list = shlex.split(" ".join(shlex.split(workon_str)))
|
package_list = shlex.split(" ".join(shlex.split(workon_str)))
|
||||||
self.mandatory_source.update(package_list)
|
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":
|
elif arg == "--no-workon-deps":
|
||||||
self.no_workon_deps = True
|
self.no_workon_deps = True
|
||||||
elif arg == "--rebuild":
|
elif arg == "--rebuild":
|
||||||
@ -775,6 +780,12 @@ class DepGraphGenerator(object):
|
|||||||
if info["optional"]:
|
if info["optional"]:
|
||||||
rm_pkgs.add(pkg)
|
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
|
# Remove the packages we don't want, simplifying the graph and making
|
||||||
# it easier for us to crack cycles.
|
# it easier for us to crack cycles.
|
||||||
for pkg in sorted(rm_pkgs):
|
for pkg in sorted(rm_pkgs):
|
||||||
@ -1611,9 +1622,13 @@ def main():
|
|||||||
|
|
||||||
if "--quiet" not in emerge.opts:
|
if "--quiet" not in emerge.opts:
|
||||||
cmdline_packages = " ".join(emerge.cmdline_packages)
|
cmdline_packages = " ".join(emerge.cmdline_packages)
|
||||||
|
nomerge_packages = " ".join(deps.nomerge)
|
||||||
print "Starting fast-emerge."
|
print "Starting fast-emerge."
|
||||||
print " Building package %s on %s" % (cmdline_packages,
|
print " Building package %s on %s" % (cmdline_packages,
|
||||||
deps.board or "root")
|
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()
|
deps_tree, deps_info = deps.GenDependencyTree()
|
||||||
|
|
||||||
@ -1628,6 +1643,22 @@ def main():
|
|||||||
if "--tree" in emerge.opts:
|
if "--tree" in emerge.opts:
|
||||||
PrintDepsMap(deps_graph)
|
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.
|
# Run the queued emerges.
|
||||||
scheduler = EmergeQueue(deps_graph, emerge, deps.package_db, deps.show_output)
|
scheduler = EmergeQueue(deps_graph, emerge, deps.package_db, deps.show_output)
|
||||||
scheduler.Run()
|
scheduler.Run()
|
||||||
@ -1637,8 +1668,6 @@ def main():
|
|||||||
"--pretend" not in emerge.opts):
|
"--pretend" not in emerge.opts):
|
||||||
world_set = emerge.root_config.sets["selected"]
|
world_set = emerge.root_config.sets["selected"]
|
||||||
new_world_pkgs = []
|
new_world_pkgs = []
|
||||||
root = emerge.settings["ROOT"]
|
|
||||||
final_db = emerge.depgraph._dynamic_config.mydbapi[root]
|
|
||||||
for pkg in emerge.cmdline_packages:
|
for pkg in emerge.cmdline_packages:
|
||||||
for db_pkg in final_db.match_pkgs(pkg):
|
for db_pkg in final_db.match_pkgs(pkg):
|
||||||
print "Adding %s to world" % db_pkg.cp
|
print "Adding %s to world" % db_pkg.cp
|
||||||
@ -1650,6 +1679,12 @@ def main():
|
|||||||
if deps.board and "--pretend" not in emerge.opts:
|
if deps.board and "--pretend" not in emerge.opts:
|
||||||
portage.env_update()
|
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"
|
print "Done"
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user