Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH 2/5] EbuildFetcher: inherit CompositeTask (bug 653810)
Date: Sun, 22 Apr 2018 22:33:15
Message-Id: 20180422223014.24341-3-zmedico@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) by Zac Medico
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