[prev in list] [next in list] [prev in thread] [next in thread]
List: gentoo-portage-dev
Subject: [gentoo-portage-dev] [PATCH 4/5] EbuildFetcher: use _async_uri_map in _start (bug 653810)
From: Zac Medico <zmedico () gentoo ! org>
Date: 2018-04-22 22:30:13
Message-ID: 20180422223014.24341-5-zmedico () gentoo ! org
[Download RAW message or body]
Use _async_uri_map to avoid event loop recursion in _start.
Bug: https://bugs.gentoo.org/653810
---
pym/_emerge/EbuildFetcher.py | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index 1f574740b..8f6cc60fe 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -13,6 +13,7 @@ from portage import _unicode_decode
from portage.checksum import _hash_filter
from portage.elog.messages import eerror
from portage.package.ebuild.fetch import _check_distfile, fetch
+from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
from portage.util._async.ForkProcess import ForkProcess
from portage.util._pty import _create_pty_or_pipe
from _emerge.CompositeTask import CompositeTask
@@ -40,6 +41,25 @@ class EbuildFetcher(CompositeTask):
return self._fetcher_proc.already_fetched(settings)
def _start(self):
+ self._start_task(
+ AsyncTaskFuture(future=self._fetcher_proc._async_uri_map()),
+ self._start_fetch)
+
+ def _start_fetch(self, uri_map_task):
+ self._assert_current(uri_map_task)
+ try:
+ uri_map = uri_map_task.future.result()
+ except portage.exception.InvalidDependString as e:
+ msg_lines = []
+ msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
+ (self.pkg.cpv, e)
+ msg_lines.append(msg)
+ self._fetcher_proc._eerror(msg_lines)
+ self._current_task = None
+ self.returncode = 1
+ self._async_wait()
+ return
+
self._start_task(self._fetcher_proc, self._default_final_exit)
@@ -123,18 +143,8 @@ class _EbuildFetcherProcess(ForkProcess):
root_config = self.pkg.root_config
portdb = root_config.trees["porttree"].dbapi
ebuild_path = self._get_ebuild_path()
-
- try:
- uri_map = self.scheduler.run_until_complete(self._async_uri_map())
- except portage.exception.InvalidDependString as e:
- msg_lines = []
- msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
- (self.pkg.cpv, e)
- msg_lines.append(msg)
- self._eerror(msg_lines)
- self._set_returncode((self.pid, 1 << 8))
- self._async_wait()
- return
+ # This is initialized by an earlier _async_uri_map call.
+ uri_map = self._uri_map
if not uri_map:
# Nothing to fetch.
--
2.13.6
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic