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,

Reply via email to