From 3b44e1cda7791c2f8dcc1dac44834d04dd360717 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 6 Dec 2009 11:02:00 +0000 Subject: Add a AbstractEbuildProcess class for MiscFunctionsProcess to inherit the _pipe and _can_log methods that used to be in the EbuildProcess class. (trunk r14933) svn path=/main/branches/2.1.7/; revision=14947 --- pym/_emerge/AbstractEbuildProcess.py | 24 ++++++++++++++++++++++++ pym/_emerge/EbuildProcess.py | 23 +++++------------------ pym/_emerge/MiscFunctionsProcess.py | 10 +++++----- 3 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 pym/_emerge/AbstractEbuildProcess.py (limited to 'pym/_emerge') diff --git a/pym/_emerge/AbstractEbuildProcess.py b/pym/_emerge/AbstractEbuildProcess.py new file mode 100644 index 000000000..db599019c --- /dev/null +++ b/pym/_emerge/AbstractEbuildProcess.py @@ -0,0 +1,24 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +from _emerge.SpawnProcess import SpawnProcess +import portage +from portage import os + +class AbstractEbuildProcess(SpawnProcess): + + __slots__ = ('phase', 'pkg', 'settings',) + + 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 _can_log(self, slave_fd): + # With sesandbox, logging works through a pty but not through a + # normal pipe. So, disable logging if ptys are broken. + # See Bug #162404. + return not ('sesandbox' in self.settings.features \ + and self.settings.selinux_enabled()) or os.isatty(slave_fd) diff --git a/pym/_emerge/EbuildProcess.py b/pym/_emerge/EbuildProcess.py index a6a0b362b..597caf4dd 100644 --- a/pym/_emerge/EbuildProcess.py +++ b/pym/_emerge/EbuildProcess.py @@ -2,13 +2,13 @@ # Distributed under the terms of the GNU General Public License v2 # $Id$ -from _emerge.SpawnProcess import SpawnProcess +from _emerge.AbstractEbuildProcess import AbstractEbuildProcess import portage from portage import os -class EbuildProcess(SpawnProcess): +class EbuildProcess(AbstractEbuildProcess): - __slots__ = ("phase", "pkg", "settings", "tree") + __slots__ = ('tree',) def _start(self): # Don't open the log file during the clean phase since the @@ -16,20 +16,7 @@ class EbuildProcess(SpawnProcess): # 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 _can_log(self, slave_fd): - # With sesandbox, logging works through a pty but not through a - # normal pipe. So, disable logging if ptys are broken. - # See Bug #162404. - return not ('sesandbox' in self.settings.features \ - and self.settings.selinux_enabled()) or os.isatty(slave_fd) + AbstractEbuildProcess._start(self) def _spawn(self, args, **kwargs): @@ -47,7 +34,7 @@ class EbuildProcess(SpawnProcess): return rval def _set_returncode(self, wait_retval): - SpawnProcess._set_returncode(self, wait_retval) + AbstractEbuildProcess._set_returncode(self, wait_retval) if self.phase not in ("clean", "cleanrm"): self.returncode = portage._doebuild_exit_status_check_and_log( diff --git a/pym/_emerge/MiscFunctionsProcess.py b/pym/_emerge/MiscFunctionsProcess.py index 3e2fff7cc..63d7873ea 100644 --- a/pym/_emerge/MiscFunctionsProcess.py +++ b/pym/_emerge/MiscFunctionsProcess.py @@ -2,16 +2,16 @@ # Distributed under the terms of the GNU General Public License v2 # $Id$ -from _emerge.SpawnProcess import SpawnProcess +from _emerge.AbstractEbuildProcess import AbstractEbuildProcess import portage from portage import os -class MiscFunctionsProcess(SpawnProcess): +class MiscFunctionsProcess(AbstractEbuildProcess): """ Spawns misc-functions.sh with an existing ebuild environment. """ - __slots__ = ("commands", "phase", "pkg", "settings") + __slots__ = ('commands',) def _start(self): settings = self.settings @@ -26,7 +26,7 @@ class MiscFunctionsProcess(SpawnProcess): portage._doebuild_exit_status_unlink( settings.get("EBUILD_EXIT_STATUS_FILE")) - SpawnProcess._start(self) + AbstractEbuildProcess._start(self) def _spawn(self, args, **kwargs): settings = self.settings @@ -35,7 +35,7 @@ class MiscFunctionsProcess(SpawnProcess): debug=debug, **kwargs) def _set_returncode(self, wait_retval): - SpawnProcess._set_returncode(self, wait_retval) + AbstractEbuildProcess._set_returncode(self, wait_retval) self.returncode = portage._doebuild_exit_status_check_and_log( self.settings, self.phase, self.returncode) -- cgit v1.2.3-1-g7c22