commit:     943bd29a388a7d113066bad660c9bfdb6fab0821
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 29 20:35:37 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Apr 29 20:35:37 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=943bd29a

EbuildFetcher: fix deprecated _set_returncode (bug 654276)

Move cleanup code from _set_returncode to _async_waitpid_cb,
since _set_returncode expects an os.waitpid return value which
is inconveniently different from the returncode that is passed to
asyncio.AbstractChildWatcher.add_child_handler callbacks.

Bug: https://bugs.gentoo.org/654276

 pym/_emerge/EbuildFetcher.py | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index 466beac06..7c2cb3a58 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import copy
@@ -166,7 +166,7 @@ class _EbuildFetcherProcess(ForkProcess):
 
                if not uri_map:
                        # Nothing to fetch.
-                       self._set_returncode((self.pid, os.EX_OK << 8))
+                       self.returncode = os.EX_OK
                        self._async_wait()
                        return
 
@@ -178,7 +178,7 @@ class _EbuildFetcherProcess(ForkProcess):
                if self.prefetch and \
                        self._prefetch_size_ok(uri_map, settings, ebuild_path):
                        self.config_pool.deallocate(settings)
-                       self._set_returncode((self.pid, os.EX_OK << 8))
+                       self.returncode = os.EX_OK
                        self._async_wait()
                        return
 
@@ -327,8 +327,12 @@ class _EbuildFetcherProcess(ForkProcess):
                if msg:
                        self.scheduler.output(msg, log_path=self.logfile)
 
-       def _set_returncode(self, wait_retval):
-               ForkProcess._set_returncode(self, wait_retval)
+       def _async_waitpid_cb(self, *args, **kwargs):
+               """
+               Override _async_waitpid_cb to perform cleanup that is
+               not necessarily idempotent.
+               """
+               ForkProcess._async_waitpid_cb(self, *args, **kwargs)
                # Collect elog messages that might have been
                # created by the pkg_nofetch phase.
                # Skip elog messages for prefetch, in order to avoid duplicates.

Reply via email to