commit: a0e96e92ae040052f9f11e1731e221346886aa3b Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Sun Apr 22 20:20:45 2018 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Apr 23 18:39:31 2018 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a0e96e92
EbuildFetcher: inherit CompositeTask (bug 653810) Make EbuildFetcher inherit CompositeTask, and move remaining code to a _EbuildFetcherProcess class that still inherits ForkProcess. The CompositeTask framework will be used to split EbuildFetcher into subtasks, in order to prevent event loop recursion. Bug: https://bugs.gentoo.org/653810 Reviewed-by: Brian Dolbec <dolsen <AT> gentoo.org> pym/_emerge/EbuildFetcher.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py index d98d00736..81eeb6dcd 100644 --- a/pym/_emerge/EbuildFetcher.py +++ b/pym/_emerge/EbuildFetcher.py @@ -15,12 +15,17 @@ from portage.elog.messages import eerror from portage.package.ebuild.fetch import _check_distfile, fetch from portage.util._async.ForkProcess import ForkProcess from portage.util._pty import _create_pty_or_pipe +from _emerge.CompositeTask import CompositeTask -class EbuildFetcher(ForkProcess): + +class EbuildFetcher(CompositeTask): __slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall", - "pkg", "prefetch") + \ - ("_digests", "_manifest", "_settings", "_uri_map") + "logfile", "pkg", "prefetch", "_fetcher_proc") + + def __init__(self, **kwargs): + CompositeTask.__init__(self, **kwargs) + self._fetcher_proc = _EbuildFetcherProcess(**kwargs) def already_fetched(self, settings): """ @@ -32,7 +37,18 @@ class EbuildFetcher(ForkProcess): such messages. This will raise InvalidDependString if SRC_URI is invalid. """ + return self._fetcher_proc.already_fetched(settings) + + def _start(self): + self._start_task(self._fetcher_proc, self._default_final_exit) + +class _EbuildFetcherProcess(ForkProcess): + + __slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall", + "pkg", "prefetch", "_digests", "_manifest", "_settings", "_uri_map") + + def already_fetched(self, settings): uri_map = self._get_uri_map() if not uri_map: return True