1 |
Make EbuildFetcher inherit CompositeTask, and move remaining code |
2 |
to a _EbuildFetcherProcess class that still inherits ForkProcess. |
3 |
The CompositeTask framework will be used to split EbuildFetcher |
4 |
into subtasks, in order to prevent event loop recursion. |
5 |
|
6 |
Bug: https://bugs.gentoo.org/653810 |
7 |
--- |
8 |
pym/_emerge/EbuildFetcher.py | 22 +++++++++++++++++++--- |
9 |
1 file changed, 19 insertions(+), 3 deletions(-) |
10 |
|
11 |
diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py |
12 |
index d98d00736..81eeb6dcd 100644 |
13 |
--- a/pym/_emerge/EbuildFetcher.py |
14 |
+++ b/pym/_emerge/EbuildFetcher.py |
15 |
@@ -15,12 +15,17 @@ from portage.elog.messages import eerror |
16 |
from portage.package.ebuild.fetch import _check_distfile, fetch |
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 |
|
21 |
-class EbuildFetcher(ForkProcess): |
22 |
+ |
23 |
+class EbuildFetcher(CompositeTask): |
24 |
|
25 |
__slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall", |
26 |
- "pkg", "prefetch") + \ |
27 |
- ("_digests", "_manifest", "_settings", "_uri_map") |
28 |
+ "logfile", "pkg", "prefetch", "_fetcher_proc") |
29 |
+ |
30 |
+ def __init__(self, **kwargs): |
31 |
+ CompositeTask.__init__(self, **kwargs) |
32 |
+ self._fetcher_proc = _EbuildFetcherProcess(**kwargs) |
33 |
|
34 |
def already_fetched(self, settings): |
35 |
""" |
36 |
@@ -32,7 +37,18 @@ class EbuildFetcher(ForkProcess): |
37 |
such messages. This will raise InvalidDependString if SRC_URI is |
38 |
invalid. |
39 |
""" |
40 |
+ return self._fetcher_proc.already_fetched(settings) |
41 |
+ |
42 |
+ def _start(self): |
43 |
+ self._start_task(self._fetcher_proc, self._default_final_exit) |
44 |
+ |
45 |
|
46 |
+class _EbuildFetcherProcess(ForkProcess): |
47 |
+ |
48 |
+ __slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall", |
49 |
+ "pkg", "prefetch", "_digests", "_manifest", "_settings", "_uri_map") |
50 |
+ |
51 |
+ def already_fetched(self, settings): |
52 |
uri_map = self._get_uri_map() |
53 |
if not uri_map: |
54 |
return True |
55 |
-- |
56 |
2.13.6 |