commit: bfe550f69ac4e0126412bc83f7e6f6f0d1c6dc1f Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Sat May 1 23:38:50 2021 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Sat May 1 23:49:07 2021 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=bfe550f6
PipeLogger: handle FileNotFoundError when cancelled during _start Bug: https://bugs.gentoo.org/787542 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> lib/portage/util/_async/PipeLogger.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/lib/portage/util/_async/PipeLogger.py b/lib/portage/util/_async/PipeLogger.py index b7c03043f..a335ce96f 100644 --- a/lib/portage/util/_async/PipeLogger.py +++ b/lib/portage/util/_async/PipeLogger.py @@ -33,16 +33,31 @@ class PipeLogger(AbstractPollTask): self._log_file = log_file_path _set_nonblocking(self._log_file.fileno()) elif log_file_path is not None: - self._log_file = open(_unicode_encode(log_file_path, - encoding=_encodings['fs'], errors='strict'), mode='ab') - if log_file_path.endswith('.gz'): - self._log_file_real = self._log_file - self._log_file = gzip.GzipFile(filename='', mode='ab', - fileobj=self._log_file) - - portage.util.apply_secpass_permissions(log_file_path, - uid=portage.portage_uid, gid=portage.portage_gid, - mode=0o660) + try: + self._log_file = open( + _unicode_encode( + log_file_path, encoding=_encodings["fs"], errors="strict" + ), + mode="ab", + ) + + if log_file_path.endswith(".gz"): + self._log_file_real = self._log_file + self._log_file = gzip.GzipFile( + filename="", mode="ab", fileobj=self._log_file + ) + + portage.util.apply_secpass_permissions( + log_file_path, + uid=portage.portage_uid, + gid=portage.portage_gid, + mode=0o660, + ) + except FileNotFoundError: + if self._was_cancelled(): + self._async_wait() + return + raise if isinstance(self.input_fd, int): self.input_fd = os.fdopen(self.input_fd, 'rb', 0)
