diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-08-18 17:08:59 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-08-18 17:08:59 -0700 |
commit | 187df8a3beaffb09948799f5630f5cceeaeb95c5 (patch) | |
tree | 05aa334a559585ef7b3bfb24ffd7061d215a1d3f /pym/_emerge/BinpkgEnvExtractor.py | |
parent | 31cca99d48004d74ccac68de478eadef0a3ce83e (diff) | |
download | portage-187df8a3beaffb09948799f5630f5cceeaeb95c5.tar.gz portage-187df8a3beaffb09948799f5630f5cceeaeb95c5.tar.bz2 portage-187df8a3beaffb09948799f5630f5cceeaeb95c5.zip |
Move the code from _prepare_env_file() to a new BinpkgEnvExtractor
class.
Diffstat (limited to 'pym/_emerge/BinpkgEnvExtractor.py')
-rw-r--r-- | pym/_emerge/BinpkgEnvExtractor.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/pym/_emerge/BinpkgEnvExtractor.py b/pym/_emerge/BinpkgEnvExtractor.py new file mode 100644 index 000000000..77060589a --- /dev/null +++ b/pym/_emerge/BinpkgEnvExtractor.py @@ -0,0 +1,66 @@ +# Copyright 1999-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +import errno + +from _emerge.CompositeTask import CompositeTask +from _emerge.SpawnProcess import SpawnProcess +from portage import os, _shell_quote, _unicode_encode +from portage.const import BASH_BINARY + +class BinpkgEnvExtractor(CompositeTask): + """ + Extract environment.bz2 for a binary or installed package. + """ + __slots__ = ('settings',) + + def saved_env_exists(self): + return os.path.exists(self._get_saved_env_path()) + + def dest_env_exists(self): + return os.path.exists(self._get_dest_env_path()) + + def _get_saved_env_path(self): + return os.path.join(os.path.dirname(self.settings['EBUILD']), + "environment.bz2") + + def _get_dest_env_path(self): + return os.path.join(self.settings["T"], "environment") + + def _start(self): + saved_env_path = self._get_saved_env_path() + dest_env_path = self._get_dest_env_path() + shell_cmd = "bzip2 -dc %s > %s" % \ + (_shell_quote(saved_env_path), + _shell_quote(dest_env_path)) + extractor_proc = SpawnProcess( + args=[BASH_BINARY, "-c", shell_cmd], + background=self.background, + env=self.settings.environ(), + scheduler=self.scheduler, + logfile=self.settings.get('PORTAGE_LOGFILE')) + + self._start_task(extractor_proc, self._extractor_exit) + + def _remove_dest_env(self): + try: + os.unlink(self._get_dest_env_path()) + except OSError as e: + if e.errno != errno.ENOENT: + raise + + def _extractor_exit(self, extractor_proc): + + if self._default_exit(extractor_proc) != os.EX_OK: + self._remove_dest_env() + self.wait() + return + + # This is a signal to ebuild.sh, so that it knows to filter + # out things like SANDBOX_{DENY,PREDICT,READ,WRITE} that + # would be preserved between normal phases. + open(_unicode_encode(self._get_dest_env_path() + '.raw'), 'w') + + self._current_task = None + self.returncode = os.EX_OK + self.wait() |