commit:     77e545e0955930606eb7e73d3970d8c0706fd8a8
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Mar  7 14:55:49 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Mar  7 15:12:42 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=77e545e0

EbuildPhase: Use async and await syntax

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/_emerge/EbuildPhase.py                    | 28 ++++++++++++---------------
 lib/portage/util/_async/SchedulerInterface.py | 10 ++++------
 2 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/lib/_emerge/EbuildPhase.py b/lib/_emerge/EbuildPhase.py
index e4c0428a6..26c770d29 100644
--- a/lib/_emerge/EbuildPhase.py
+++ b/lib/_emerge/EbuildPhase.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import functools
@@ -21,7 +21,6 @@ from portage.util._dyn_libs.soname_deps_qa import (
 )
 from portage.package.ebuild.prepare_build_dirs import (_prepare_workdir,
                _prepare_fake_distdir, _prepare_fake_filesdir)
-from portage.util.futures.compat_coroutine import coroutine
 from portage.util import writemsg
 from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
 from portage.util._async.BuildLogger import BuildLogger
@@ -70,11 +69,10 @@ class EbuildPhase(CompositeTask):
        _locked_phases = ("setup", "preinst", "postinst", "prerm", "postrm")
 
        def _start(self):
-               future = 
asyncio.ensure_future(self._async_start(loop=self.scheduler), 
loop=self.scheduler)
+               future = asyncio.ensure_future(self._async_start(), 
loop=self.scheduler)
                self._start_task(AsyncTaskFuture(future=future), 
self._async_start_exit)
 
-       @coroutine
-       def _async_start(self, loop=None):
+       async def _async_start(self):
 
                need_builddir = self.phase not in 
EbuildProcess._phases_without_builddir
 
@@ -132,7 +130,7 @@ class EbuildPhase(CompositeTask):
                        # Force background=True for this header since it's 
intended
                        # for the log and it doesn't necessarily need to be 
visible
                        # elsewhere.
-                       yield self._elog('einfo', msg, background=True, 
loop=self.scheduler)
+                       await self._elog('einfo', msg, background=True)
 
                if self.phase == 'package':
                        if 'PORTAGE_BINPKG_TMPFILE' not in self.settings:
@@ -402,8 +400,7 @@ class EbuildPhase(CompositeTask):
                self.returncode = 1
                self.wait()
 
-       @coroutine
-       def _elog(self, elog_funcname, lines, background=None, loop=None):
+       async def _elog(self, elog_funcname, lines, background=None):
                if background is None:
                        background = self.background
                out = io.StringIO()
@@ -434,12 +431,12 @@ class EbuildPhase(CompositeTask):
                                        
_set_nonblocking(build_logger.stdin.fileno())
                                        log_file = build_logger.stdin
 
-                               yield self.scheduler.async_output(msg, 
log_file=log_file,
-                                       background=background, 
loop=self.scheduler)
+                               await self.scheduler.async_output(msg, 
log_file=log_file,
+                                       background=background)
 
                                if build_logger is not None:
                                        build_logger.stdin.close()
-                                       yield build_logger.async_wait()
+                                       await build_logger.async_wait()
                        except asyncio.CancelledError:
                                if build_logger is not None:
                                        build_logger.cancel()
@@ -487,7 +484,7 @@ class _PostPhaseCommands(CompositeTask):
 
                        if 'qa-unresolved-soname-deps' in 
self.settings.features:
                                # This operates on REQUIRES metadata generated 
by the above function call.
-                               future = 
asyncio.ensure_future(self._soname_deps_qa(loop=self.scheduler), 
loop=self.scheduler)
+                               future = 
asyncio.ensure_future(self._soname_deps_qa(), loop=self.scheduler)
                                # If an unexpected exception occurs, then this 
will raise it.
                                future.add_done_callback(lambda future: 
future.cancelled() or future.result())
                                
self._start_task(AsyncTaskFuture(future=future), self._default_final_exit)
@@ -496,12 +493,11 @@ class _PostPhaseCommands(CompositeTask):
                else:
                        self._default_final_exit(task)
 
-       @coroutine
-       def _soname_deps_qa(self, loop=None):
+       async def _soname_deps_qa(self):
 
                vardb = 
QueryCommand.get_db()[self.settings['EROOT']]['vartree'].dbapi
 
-               all_provides = (yield 
self.scheduler.run_in_executor(ForkExecutor(loop=self.scheduler), 
_get_all_provides, vardb))
+               all_provides = (await 
self.scheduler.run_in_executor(ForkExecutor(loop=self.scheduler), 
_get_all_provides, vardb))
 
                unresolved = 
_get_unresolved_soname_deps(os.path.join(self.settings['PORTAGE_BUILDDIR'], 
'build-info'), all_provides)
 
@@ -512,4 +508,4 @@ class _PostPhaseCommands(CompositeTask):
                        qa_msg.extend("\t%s: %s" % (filename, " 
".join(sorted(soname_deps)))
                                for filename, soname_deps in unresolved)
                        qa_msg.append("")
-                       yield self.elog("eqawarn", qa_msg, loop=self.scheduler)
+                       await self.elog("eqawarn", qa_msg)

diff --git a/lib/portage/util/_async/SchedulerInterface.py 
b/lib/portage/util/_async/SchedulerInterface.py
index 2865266eb..c2d1be51f 100644
--- a/lib/portage/util/_async/SchedulerInterface.py
+++ b/lib/portage/util/_async/SchedulerInterface.py
@@ -1,4 +1,4 @@
-# Copyright 2012-2020 Gentoo Authors
+# Copyright 2012-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import gzip
@@ -8,7 +8,6 @@ from portage import _encodings
 from portage import _unicode_encode
 from portage.util import writemsg_level
 from portage.util.futures._asyncio.streams import _writer
-from portage.util.futures.compat_coroutine import coroutine
 from ..SlotObject import SlotObject
 
 class SchedulerInterface(SlotObject):
@@ -55,9 +54,8 @@ class SchedulerInterface(SlotObject):
        def _return_false():
                return False
 
-       @coroutine
-       def async_output(self, msg, log_file=None, background=None,
-               level=0, noiselevel=-1, loop=None):
+       async def async_output(self, msg, log_file=None, background=None,
+               level=0, noiselevel=-1):
                """
                Output a msg to stdio (if not in background) and to a log file
                if provided.
@@ -81,7 +79,7 @@ class SchedulerInterface(SlotObject):
                        writemsg_level(msg, level=level, noiselevel=noiselevel)
 
                if log_file is not None:
-                       yield _writer(log_file, _unicode_encode(msg), loop=loop)
+                       await _writer(log_file, _unicode_encode(msg))
 
        def output(self, msg, log_path=None, background=None,
                level=0, noiselevel=-1):

Reply via email to