| # Copyright 1999-2009 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| from _emerge.BinpkgFetcher import BinpkgFetcher |
| from _emerge.CompositeTask import CompositeTask |
| from _emerge.BinpkgVerifier import BinpkgVerifier |
| from portage import os |
| |
| |
| class BinpkgPrefetcher(CompositeTask): |
| |
| __slots__ = ("pkg",) + ( |
| "pkg_path", |
| "_bintree", |
| ) |
| |
| def _start(self): |
| self._bintree = self.pkg.root_config.trees["bintree"] |
| fetcher = BinpkgFetcher( |
| background=self.background, |
| logfile=self.scheduler.fetch.log_file, |
| pkg=self.pkg, |
| scheduler=self.scheduler, |
| ) |
| self.pkg_path = fetcher.pkg_path |
| self._start_task(fetcher, self._fetcher_exit) |
| |
| def _fetcher_exit(self, fetcher): |
| |
| if self._default_exit(fetcher) != os.EX_OK: |
| self.wait() |
| return |
| |
| verifier = BinpkgVerifier( |
| background=self.background, |
| logfile=self.scheduler.fetch.log_file, |
| pkg=self.pkg, |
| scheduler=self.scheduler, |
| _pkg_path=self.pkg_path, |
| ) |
| self._start_task(verifier, self._verifier_exit) |
| |
| def _verifier_exit(self, verifier): |
| if self._default_exit(verifier) != os.EX_OK: |
| self.wait() |
| return |
| |
| self._bintree.inject(self.pkg.cpv, filename=self.pkg_path) |
| |
| self._current_task = None |
| self.returncode = os.EX_OK |
| self.wait() |