| # Copyright 1999-2009 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| from _emerge.EbuildProcess import EbuildProcess |
| from portage import os |
| |
| class EbuildBinpkg(EbuildProcess): |
| """ |
| This assumes that src_install() has successfully completed. |
| """ |
| __slots__ = ("_binpkg_tmpfile",) |
| |
| def _start(self): |
| self.phase = "package" |
| self.tree = "porttree" |
| pkg = self.pkg |
| root_config = pkg.root_config |
| portdb = root_config.trees["porttree"].dbapi |
| bintree = root_config.trees["bintree"] |
| ebuild_path = portdb.findname(pkg.cpv) |
| if ebuild_path is None: |
| raise AssertionError("ebuild not found for '%s'" % pkg.cpv) |
| settings = self.settings |
| debug = settings.get("PORTAGE_DEBUG") == "1" |
| |
| bintree.prevent_collision(pkg.cpv) |
| binpkg_tmpfile = os.path.join(bintree.pkgdir, |
| pkg.cpv + ".tbz2." + str(os.getpid())) |
| self._binpkg_tmpfile = binpkg_tmpfile |
| settings["PORTAGE_BINPKG_TMPFILE"] = binpkg_tmpfile |
| settings.backup_changes("PORTAGE_BINPKG_TMPFILE") |
| |
| try: |
| EbuildProcess._start(self) |
| finally: |
| settings.pop("PORTAGE_BINPKG_TMPFILE", None) |
| |
| def _set_returncode(self, wait_retval): |
| EbuildProcess._set_returncode(self, wait_retval) |
| |
| pkg = self.pkg |
| bintree = pkg.root_config.trees["bintree"] |
| binpkg_tmpfile = self._binpkg_tmpfile |
| if self.returncode == os.EX_OK: |
| bintree.inject(pkg.cpv, filename=binpkg_tmpfile) |
| |