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

Reply via email to