From 51483738aeebe26a120ad30d2c9c662f01e26ff4 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 16 Aug 2010 08:16:08 -0700 Subject: Split out parts of doebuild() so that EbuildProcess can bypass it and call the spawn() function directly. --- pym/_emerge/EbuildBuild.py | 17 +++++++++++------ pym/_emerge/EbuildExecuter.py | 22 ++++++++++++++++++++-- pym/_emerge/EbuildProcess.py | 37 +++++++++++++++++++------------------ 3 files changed, 50 insertions(+), 26 deletions(-) (limited to 'pym/_emerge') diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py index be6025a82..f0fdcbdbf 100644 --- a/pym/_emerge/EbuildBuild.py +++ b/pym/_emerge/EbuildBuild.py @@ -1,4 +1,4 @@ -# Copyright 1999-2009 Gentoo Foundation +# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.EbuildExecuter import EbuildExecuter @@ -17,6 +17,8 @@ from portage import _encodings from portage import _unicode_encode import codecs from portage.output import colorize +from portage.package.ebuild.doebuild import _check_temp_dir + class EbuildBuild(CompositeTask): __slots__ = ("args_set", "config_pool", "find_blockers", @@ -26,11 +28,16 @@ class EbuildBuild(CompositeTask): def _start(self): - logger = self.logger - opts = self.opts pkg = self.pkg settings = self.settings - world_atom = self.world_atom + + rval = _check_temp_dir(settings) + if rval != os.EX_OK: + self.returncode = rval + self._current_task = None + self.wait() + return + root_config = pkg.root_config tree = "porttree" self._tree = tree @@ -176,7 +183,6 @@ class EbuildBuild(CompositeTask): self.wait() return - opts = self.opts buildpkg = self._buildpkg if not buildpkg: @@ -259,7 +265,6 @@ class EbuildBuild(CompositeTask): and neither fetchonly nor buildpkgonly mode are enabled. """ - find_blockers = self.find_blockers ldpath_mtimes = self.ldpath_mtimes logger = self.logger pkg = self.pkg diff --git a/pym/_emerge/EbuildExecuter.py b/pym/_emerge/EbuildExecuter.py index 90cf401a7..7abcbb77e 100644 --- a/pym/_emerge/EbuildExecuter.py +++ b/pym/_emerge/EbuildExecuter.py @@ -1,4 +1,4 @@ -# Copyright 1999-2009 Gentoo Foundation +# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.EbuildPhase import EbuildPhase @@ -7,6 +7,8 @@ from _emerge.CompositeTask import CompositeTask import portage from portage import os from portage.eapi import eapi_has_src_prepare_and_src_configure +from portage.package.ebuild.doebuild import _prepare_env_file, \ + _prepare_fake_distdir class EbuildExecuter(CompositeTask): @@ -30,8 +32,24 @@ class EbuildExecuter(CompositeTask): scheduler = self.scheduler settings = self.settings cleanup = 0 - portage.prepare_build_dirs(pkg.root, settings, cleanup) + rval = _prepare_env_file(settings) + if rval != os.EX_OK: + self.returncode = rval + self._current_task = None + self.wait() + return + + portdb = pkg.root_config.trees['porttree'].dbapi + ebuild_path = settings['EBUILD'] + mytree = os.path.dirname(os.path.dirname( + os.path.dirname(ebuild_path))) + alist = portdb.getFetchMap(pkg.cpv, + useflags=pkg.use.enabled, mytree=mytree) + aalist = portdb.getFetchMap(pkg.cpv, mytree=mytree) + settings.configdict["pkg"]["A"] = " ".join(alist) + settings.configdict["pkg"]["AA"] = " ".join(aalist) + _prepare_fake_distdir(settings, alist) setup_phase = EbuildPhase(background=self.background, pkg=pkg, phase="setup", scheduler=scheduler, diff --git a/pym/_emerge/EbuildProcess.py b/pym/_emerge/EbuildProcess.py index c643c3bd2..bd0e0d6fc 100644 --- a/pym/_emerge/EbuildProcess.py +++ b/pym/_emerge/EbuildProcess.py @@ -1,10 +1,13 @@ -# Copyright 1999-2009 Gentoo Foundation +# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.AbstractEbuildProcess import AbstractEbuildProcess +from portage import _shell_quote from portage import os -from portage.package.ebuild.doebuild import doebuild, \ - _post_phase_userpriv_perms +from portage.const import EBUILD_SH_BINARY +from portage.package.ebuild.doebuild import _post_phase_userpriv_perms +from portage.package.ebuild.doebuild import spawn as doebuild_spawn +from portage.package.ebuild.doebuild import _spawn_actionmap class EbuildProcess(AbstractEbuildProcess): @@ -19,21 +22,19 @@ class EbuildProcess(AbstractEbuildProcess): AbstractEbuildProcess._start(self) def _spawn(self, args, **kwargs): - - root_config = self.pkg.root_config - tree = self.tree - mydbapi = root_config.trees[tree].dbapi - vartree = root_config.trees["vartree"] - settings = self.settings - ebuild_path = settings["EBUILD"] - debug = settings.get("PORTAGE_DEBUG") == "1" - - - rval = doebuild(ebuild_path, self.phase, - root_config.root, settings, debug, - mydbapi=mydbapi, tree=tree, vartree=vartree, **kwargs) - - return rval + self.settings["EBUILD_PHASE"] = self.phase + actionmap = _spawn_actionmap(self.settings) + if self.phase in actionmap: + kwargs.update(actionmap[self.phase]["args"]) + cmd = actionmap[self.phase]["cmd"] % self.phase + else: + cmd = "%s %s" % (_shell_quote(os.path.join( + self.settings["PORTAGE_BIN_PATH"], + os.path.basename(EBUILD_SH_BINARY))), self.phase) + try: + return doebuild_spawn(cmd, self.settings, **kwargs) + finally: + self.settings.pop("EBUILD_PHASE", None) def _set_returncode(self, wait_retval): AbstractEbuildProcess._set_returncode(self, wait_retval) -- cgit v1.2.3-1-g7c22