diff options
author | Mike Frysinger <vapier@google.com> | 2015-05-31 05:15:46 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@google.com> | 2015-05-31 05:15:46 -0400 |
commit | 031126cef43e4338873d97de2189fa9f2fe06eea (patch) | |
tree | 48f628bbcec0b7766c68796ab2d560132b0e8c50 /usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py | |
parent | 06303e6a87d55bdd9c880b2f4df65e0bbc6202ff (diff) | |
download | portage-031126cef43e4338873d97de2189fa9f2fe06eea.tar.gz |
initial import
This is the portage-prefix-2.2.14 release set up like:
./configure \
--prefix=/usr/local/google/home/vapier/src/android/mdk/build/portage/tmp/prefix-portage-2.2.14/destdir/usr \
--with-portage-user=vapier \
--with-portage-group=eng \
--with-offset-prefix=/usr/local/google/home/vapier/src/android/mdk/build/portage/tmp/prefix-portage-2.2.14/destdir
It does not work as-is; follow up commits will make it more usable.
BUG=b:20895978
Change-Id: I03d3de254bf9f7c3204bd6ac7254c15476b08ba7
Diffstat (limited to 'usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py')
-rw-r--r-- | usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py b/usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py new file mode 100644 index 0000000..5ba1495 --- /dev/null +++ b/usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py @@ -0,0 +1,66 @@ +# Copyright 1999-2011 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 = "${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d} -c -- %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_LOG_FILE')) + + 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'), 'wb').close() + + self._current_task = None + self.returncode = os.EX_OK + self.wait() |