commit: db4dca876cdb004b12a944f5323a51bc4bbde770 Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Mon Apr 23 00:04:29 2018 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Apr 23 00:06:35 2018 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=db4dca87
EbuildBuild._start(): fix event loop recursion (bug 653844) Use async_aux_get to fetch SRC_URI metadata (it's not cached in self.pkg.metadata because some packages have an extremely large SRC_URI value). Bug: https://bugs.gentoo.org/653844 pym/_emerge/EbuildBuild.py | 19 ++++++++++++++----- pym/portage/package/ebuild/doebuild.py | 6 ++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py index 9d4afd0ea..8ad8bcae9 100644 --- a/pym/_emerge/EbuildBuild.py +++ b/pym/_emerge/EbuildBuild.py @@ -35,23 +35,32 @@ class EbuildBuild(CompositeTask): ("_build_dir", "_buildpkg", "_ebuild_path", "_issyspkg", "_tree") def _start(self): - - pkg = self.pkg - settings = self.settings - if not self.opts.fetchonly: - rval = _check_temp_dir(settings) + rval = _check_temp_dir(self.settings) if rval != os.EX_OK: self.returncode = rval self._current_task = None self._async_wait() return + # First get the SRC_URI metadata (it's not cached in self.pkg.metadata + # because some packages have an extremely large SRC_URI value). + self._start_task( + AsyncTaskFuture( + future=self.pkg.root_config.trees["porttree"].dbapi.\ + async_aux_get(self.pkg.cpv, ["SRC_URI"], myrepo=self.pkg.repo)), + self._start_with_metadata) + + def _start_with_metadata(self, aux_get_task): + self._assert_current(aux_get_task) + pkg = self.pkg + settings = self.settings root_config = pkg.root_config tree = "porttree" self._tree = tree portdb = root_config.trees[tree].dbapi settings.setcpv(pkg) + settings.configdict["pkg"]["SRC_URI"], = aux_get_task.future.result() settings.configdict["pkg"]["EMERGE_FROM"] = "ebuild" if self.opts.buildpkgonly: settings.configdict["pkg"]["MERGE_TYPE"] = "buildonly" diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index 3c8414387..0dabafeb7 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -450,8 +450,10 @@ def doebuild_environment(myebuild, mydo, myroot=None, settings=None, if hasattr(mydbapi, "getFetchMap") and \ ("A" not in mysettings.configdict["pkg"] or \ "AA" not in mysettings.configdict["pkg"]): - src_uri, = mydbapi.aux_get(mysettings.mycpv, - ["SRC_URI"], mytree=mytree) + src_uri = mysettings.configdict["pkg"].get("SRC_URI") + if src_uri is None: + src_uri, = mydbapi.aux_get(mysettings.mycpv, + ["SRC_URI"], mytree=mytree) metadata = { "EAPI" : eapi, "SRC_URI" : src_uri,