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

Unified Diff: parallel_emerge

Issue 6094001: Update parallel_emerge to experimentally support Portage 2.1.9. (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Rebase Created 9 years, 12 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 6f98f41dfac24460684a3142c223254f0a3c8674..d09324021d4b48093e6f6762e6a067d64899631c 100755
--- a/parallel_emerge
+++ b/parallel_emerge
@@ -82,11 +82,17 @@ from _emerge.main import emerge_main
from _emerge.main import parse_opts
from _emerge.Package import Package
from _emerge.Scheduler import Scheduler
+from _emerge.SetArg import SetArg
from _emerge.stdout_spinner import stdout_spinner
import portage
import portage.debug
import portage.versions
+new_portage = not portage.VERSION.startswith("2.1.7.")
+if new_portage:
+ from portage._global_updates import _global_updates
+else:
+ from portage import _global_updates
def Usage():
"""Print usage."""
@@ -390,7 +396,7 @@ class DepGraphGenerator(object):
#
# Portage normally handles this logic in emerge_main, but again, we can't
# use that function here.
- if portage._global_updates(trees, mtimedb["updates"]):
+ if _global_updates(trees, mtimedb["updates"]):
mtimedb.commit()
settings, trees, mtimedb = load_emerge_config(trees=trees)
@@ -438,6 +444,9 @@ class DepGraphGenerator(object):
root = settings["ROOT"]
emerge.root_config = trees[root]["root_config"]
+ if new_portage and "--usepkg" in opts:
+ emerge.trees[root]["bintree"].populate("--getbinpkg" in opts)
+
def CheckUseFlags(self, pkgsettings, cur_pkg, new_pkg):
"""Are the use flags in cur_pkg up to date?
@@ -498,26 +507,19 @@ class DepGraphGenerator(object):
frozen_config = _frozen_depgraph_config(emerge.settings, emerge.trees,
emerge_opts, emerge.spinner)
backtrack_max = emerge_opts.get('--backtrack', 5)
- runtime_pkg_mask = None
+ backtrack_parameters = {}
allow_backtracking = backtrack_max > 0
# Try up to backtrack_max times to create a working depgraph. Each time we
# run into a conflict, mask the offending package and try again.
# TODO(davidjames): When Portage supports --force-remote-binary directly,
# switch back to using the backtrack_depgraph function.
- for i in range(backtrack_max + 1):
- if i == backtrack_max:
- # Looks like we hit the backtracking limit. Run the dependency
- # calculation one more time (from scratch) to show the original error
- # message.
- runtime_pkg_mask = None
- allow_backtracking = False
-
+ for i in range(backtrack_max + 2):
# Create a depgraph object.
depgraph = emerge_depgraph(emerge.settings, emerge.trees, emerge_opts,
params, emerge.spinner, frozen_config=frozen_config,
allow_backtracking=allow_backtracking,
- runtime_pkg_mask=runtime_pkg_mask)
+ **backtrack_parameters)
if i == 0:
for cpv in self.forced_remote_binary_packages:
@@ -537,15 +539,19 @@ class DepGraphGenerator(object):
success, favorites = depgraph.select_files(packages)
if success:
break
- elif depgraph.need_restart():
+ elif depgraph.need_restart() and i < backtrack_max:
# Looks like we found some packages that can't be installed due to
# conflicts. Try again, masking out the conflicting packages.
- runtime_pkg_mask = depgraph.get_runtime_pkg_mask()
+ if new_portage:
+ backtrack_parameters = depgraph.get_backtrack_parameters()
+ else:
+ backtrack_parameters = {
+ 'runtime_pkg_mask': depgraph.get_runtime_pkg_mask()
+ }
elif allow_backtracking and i > 0:
- # Looks like we tried all the possible combinations, and we still can't
- # solve the graph. Stop backtracking, so that we can report an error
- # message.
- runtime_pkg_mask = None
+ # Looks like we can't solve the graph. Stop backtracking and report an
+ # error message.
+ backtrack_parameters.pop('runtime_pkg_mask', None)
allow_backtracking = False
else:
break
@@ -641,6 +647,7 @@ class DepGraphGenerator(object):
# We just refer to CPVs as packages here because it's easier.
deps = {}
for child, priorities in node_deps[0].items():
+ if isinstance(child, SetArg): continue
deps[str(child.cpv)] = dict(action=str(child.operation),
deptype=str(priorities[-1]),
deps={})
@@ -1192,7 +1199,7 @@ class DepGraphGenerator(object):
"""Update packages that can use prebuilts to do so."""
start = time.time()
- # Build list of prebuilt packages
+ # Build list of prebuilt packages.
prebuilt_pkgs = {}
for pkg, info in deps_map.iteritems():
if info and info["action"] == "merge":
@@ -1394,6 +1401,10 @@ def EmergeWorker(task_queue, job_queue, emerge, package_db):
settings, trees, mtimedb = emerge.settings, emerge.trees, emerge.mtimedb
opts, spinner = emerge.opts, emerge.spinner
opts["--nodeps"] = True
+ if new_portage:
+ # When Portage launches new processes, it goes on a rampage and closes all
+ # open file descriptors. Ask Portage not to do that, as it breaks us.
+ portage.process.get_open_fds = lambda: []
while True:
# Wait for a new item to show up on the queue. This is a blocking wait,
# so if there's nothing to do, we just sit here.
@@ -1420,8 +1431,13 @@ def EmergeWorker(task_queue, job_queue, emerge, package_db):
try:
sys.stdout = output
sys.stderr = output
- scheduler = Scheduler(settings, trees, mtimedb, opts, spinner,
- install_list, [], emerge.scheduler_graph)
+ if new_portage:
+ emerge.scheduler_graph.mergelist = install_list
+ scheduler = Scheduler(settings, trees, mtimedb, opts, spinner,
+ favorites=[], graph_config=emerge.scheduler_graph)
+ else:
+ scheduler = Scheduler(settings, trees, mtimedb, opts, spinner,
+ install_list, [], emerge.scheduler_graph)
retcode = scheduler.merge()
except Exception:
traceback.print_exc(file=output)
« 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