diff options
Diffstat (limited to 'pym/_emerge/EbuildProcess.py')
-rw-r--r-- | pym/_emerge/EbuildProcess.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/pym/_emerge/EbuildProcess.py b/pym/_emerge/EbuildProcess.py new file mode 100644 index 000000000..1f88313e8 --- /dev/null +++ b/pym/_emerge/EbuildProcess.py @@ -0,0 +1,55 @@ +from _emerge.SpawnProcess import SpawnProcess +try: + import portage +except ImportError: + from os import path as osp + import sys + sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym")) + import portage +import os +class EbuildProcess(SpawnProcess): + + __slots__ = ("phase", "pkg", "settings", "tree") + + def _start(self): + # Don't open the log file during the clean phase since the + # open file can result in an nfs lock on $T/build.log which + # prevents the clean phase from removing $T. + if self.phase not in ("clean", "cleanrm"): + self.logfile = self.settings.get("PORTAGE_LOG_FILE") + SpawnProcess._start(self) + + def _pipe(self, fd_pipes): + stdout_pipe = fd_pipes.get(1) + got_pty, master_fd, slave_fd = \ + portage._create_pty_or_pipe(copy_term_size=stdout_pipe) + return (master_fd, slave_fd) + + def _spawn(self, args, **kwargs): + + root_config = self.pkg.root_config + tree = self.tree + mydbapi = root_config.trees[tree].dbapi + settings = self.settings + ebuild_path = settings["EBUILD"] + debug = settings.get("PORTAGE_DEBUG") == "1" + + rval = portage.doebuild(ebuild_path, self.phase, + root_config.root, settings, debug, + mydbapi=mydbapi, tree=tree, **kwargs) + + return rval + + def _set_returncode(self, wait_retval): + SpawnProcess._set_returncode(self, wait_retval) + + if self.phase not in ("clean", "cleanrm"): + self.returncode = portage._doebuild_exit_status_check_and_log( + self.settings, self.phase, self.returncode) + + if self.phase == "test" and self.returncode != os.EX_OK and \ + "test-fail-continue" in self.settings.features: + self.returncode = os.EX_OK + + portage._post_phase_userpriv_perms(self.settings) + |