# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.CompositeTask import CompositeTask from portage.dep import _repo_separator from portage.output import colorize class PackageMerge(CompositeTask): __slots__ = ("merge", "postinst_failure") def _start(self): self.scheduler = self.merge.scheduler pkg = self.merge.pkg pkg_count = self.merge.pkg_count pkg_color = "PKG_MERGE" if pkg.type_name == "binary": pkg_color = "PKG_BINARY_MERGE" if pkg.installed: action_desc = "Uninstalling" preposition = "from" counter_str = "" else: action_desc = "Installing" preposition = "to" counter_str = "(%s of %s) " % \ (colorize("MERGE_LIST_PROGRESS", str(pkg_count.curval)), colorize("MERGE_LIST_PROGRESS", str(pkg_count.maxval))) msg = "%s %s%s" % \ (action_desc, counter_str, colorize(pkg_color, pkg.cpv + _repo_separator + pkg.repo)) if pkg.root_config.settings["ROOT"] != "/": msg += " %s %s" % (preposition, pkg.root) if not self.merge.build_opts.fetchonly and \ not self.merge.build_opts.pretend and \ not self.merge.build_opts.buildpkgonly: self.merge.statusMessage(msg) task = self.merge.create_install_task() self._start_task(task, self._install_exit) def _install_exit(self, task): self.postinst_failure = getattr(task, 'postinst_failure', None) self._final_exit(task) self.wait()