summaryrefslogtreecommitdiff
path: root/usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2015-05-31 05:15:46 -0400
committerMike Frysinger <vapier@google.com>2015-05-31 05:15:46 -0400
commit031126cef43e4338873d97de2189fa9f2fe06eea (patch)
tree48f628bbcec0b7766c68796ab2d560132b0e8c50 /usr/lib/portage/pym/_emerge/BinpkgEnvExtractor.py
parent06303e6a87d55bdd9c880b2f4df65e0bbc6202ff (diff)
downloadportage-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.py66
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()