1 |
Use _async_uri_map to avoid event loop recursion in _start. |
2 |
|
3 |
Bug: https://bugs.gentoo.org/653810 |
4 |
--- |
5 |
pym/_emerge/EbuildFetcher.py | 34 ++++++++++++++++++++++------------ |
6 |
1 file changed, 22 insertions(+), 12 deletions(-) |
7 |
|
8 |
diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py |
9 |
index 1f574740b..8f6cc60fe 100644 |
10 |
--- a/pym/_emerge/EbuildFetcher.py |
11 |
+++ b/pym/_emerge/EbuildFetcher.py |
12 |
@@ -13,6 +13,7 @@ from portage import _unicode_decode |
13 |
from portage.checksum import _hash_filter |
14 |
from portage.elog.messages import eerror |
15 |
from portage.package.ebuild.fetch import _check_distfile, fetch |
16 |
+from portage.util._async.AsyncTaskFuture import AsyncTaskFuture |
17 |
from portage.util._async.ForkProcess import ForkProcess |
18 |
from portage.util._pty import _create_pty_or_pipe |
19 |
from _emerge.CompositeTask import CompositeTask |
20 |
@@ -40,6 +41,25 @@ class EbuildFetcher(CompositeTask): |
21 |
return self._fetcher_proc.already_fetched(settings) |
22 |
|
23 |
def _start(self): |
24 |
+ self._start_task( |
25 |
+ AsyncTaskFuture(future=self._fetcher_proc._async_uri_map()), |
26 |
+ self._start_fetch) |
27 |
+ |
28 |
+ def _start_fetch(self, uri_map_task): |
29 |
+ self._assert_current(uri_map_task) |
30 |
+ try: |
31 |
+ uri_map = uri_map_task.future.result() |
32 |
+ except portage.exception.InvalidDependString as e: |
33 |
+ msg_lines = [] |
34 |
+ msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \ |
35 |
+ (self.pkg.cpv, e) |
36 |
+ msg_lines.append(msg) |
37 |
+ self._fetcher_proc._eerror(msg_lines) |
38 |
+ self._current_task = None |
39 |
+ self.returncode = 1 |
40 |
+ self._async_wait() |
41 |
+ return |
42 |
+ |
43 |
self._start_task(self._fetcher_proc, self._default_final_exit) |
44 |
|
45 |
|
46 |
@@ -123,18 +143,8 @@ class _EbuildFetcherProcess(ForkProcess): |
47 |
root_config = self.pkg.root_config |
48 |
portdb = root_config.trees["porttree"].dbapi |
49 |
ebuild_path = self._get_ebuild_path() |
50 |
- |
51 |
- try: |
52 |
- uri_map = self.scheduler.run_until_complete(self._async_uri_map()) |
53 |
- except portage.exception.InvalidDependString as e: |
54 |
- msg_lines = [] |
55 |
- msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \ |
56 |
- (self.pkg.cpv, e) |
57 |
- msg_lines.append(msg) |
58 |
- self._eerror(msg_lines) |
59 |
- self._set_returncode((self.pid, 1 << 8)) |
60 |
- self._async_wait() |
61 |
- return |
62 |
+ # This is initialized by an earlier _async_uri_map call. |
63 |
+ uri_map = self._uri_map |
64 |
|
65 |
if not uri_map: |
66 |
# Nothing to fetch. |
67 |
-- |
68 |
2.13.6 |