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.