| # Copyright 1999-2012 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import portage |
| from portage import os |
| from portage.elog.messages import eerror |
| from portage.util.SlotObject import SlotObject |
| |
| |
| class EbuildFetchonly(SlotObject): |
| |
| __slots__ = ("fetch_all", "pkg", "pretend", "settings") |
| |
| def execute(self): |
| settings = self.settings |
| pkg = self.pkg |
| portdb = pkg.root_config.trees["porttree"].dbapi |
| ebuild_path = portdb.findname(pkg.cpv, myrepo=pkg.repo) |
| if ebuild_path is None: |
| raise AssertionError("ebuild not found for '%s'" % pkg.cpv) |
| settings.setcpv(pkg) |
| debug = settings.get("PORTAGE_DEBUG") == "1" |
| |
| rval = portage.doebuild( |
| ebuild_path, |
| "fetch", |
| settings=settings, |
| debug=debug, |
| listonly=self.pretend, |
| fetchonly=1, |
| fetchall=self.fetch_all, |
| mydbapi=portdb, |
| tree="porttree", |
| ) |
| |
| # For pretend mode, this error message is suppressed, |
| # and the unsuccessful return value is used to trigger |
| # a call to the pkg_nofetch phase. |
| if rval != os.EX_OK and not self.pretend: |
| msg = "Fetch failed for '%s'" % (pkg.cpv,) |
| eerror(msg, phase="unpack", key=pkg.cpv) |
| |
| return rval |