diff options
author | Zac Medico <zmedico@gentoo.org> | 2021-05-01 16:38:50 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2021-05-01 16:49:07 -0700 |
commit | bfe550f69ac4e0126412bc83f7e6f6f0d1c6dc1f (patch) | |
tree | 23aed2105d9282ef4958ed01ea385ac32233f316 | |
parent | ebuild-ipc: silently handle KeyboardInterrupt (diff) | |
download | portage-bfe550f69ac4e0126412bc83f7e6f6f0d1c6dc1f.tar.gz portage-bfe550f69ac4e0126412bc83f7e6f6f0d1c6dc1f.tar.bz2 portage-bfe550f69ac4e0126412bc83f7e6f6f0d1c6dc1f.zip |
PipeLogger: handle FileNotFoundError when cancelled during _start
Bug: https://bugs.gentoo.org/787542
Signed-off-by: Zac Medico <zmedico@gentoo.org>
-rw-r--r-- | lib/portage/util/_async/PipeLogger.py | 35 |
1 files 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) |