From: Arfrever Frehtes Taifersar Arahesis Date: Wed, 2 Oct 2013 10:36:49 +0000 (+0200) Subject: Bug #418475: Handle PermissionError caused by unreadable /etc/portage/modules. X-Git-Tag: v2.2.8~67 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=5924b7afae7c731abc24a0e16fcd103e680e3e5b;p=portage.git Bug #418475: Handle PermissionError caused by unreadable /etc/portage/modules. --- diff --git a/pym/portage/env/loaders.py b/pym/portage/env/loaders.py index 372bc12fa..f86988471 100644 --- a/pym/portage/env/loaders.py +++ b/pym/portage/env/loaders.py @@ -1,10 +1,14 @@ # config.py -- Portage Config -# Copyright 2007-2011 Gentoo Foundation +# Copyright 2007-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import errno import io import stat +import portage +portage.proxy.lazyimport.lazyimport(globals(), + 'portage.util:writemsg', +) from portage import os from portage import _encodings from portage import _unicode_decode @@ -149,17 +153,21 @@ class FileLoader(DataLoader): func = self.lineParser for fn in RecursiveFileLoader(self.fname): try: - f = io.open(_unicode_encode(fn, + with io.open(_unicode_encode(fn, encoding=_encodings['fs'], errors='strict'), mode='r', - encoding=_encodings['content'], errors='replace') + encoding=_encodings['content'], errors='replace') as f: + lines = f.readlines() except EnvironmentError as e: - if e.errno not in (errno.ENOENT, errno.ESTALE): + if e.errno == errno.EACCES: + writemsg(_("Permission denied: '%s'\n") % fn, noiselevel=-1) + del e + elif e.errno in (errno.ENOENT, errno.ESTALE): + del e + else: raise - del e - continue - for line_num, line in enumerate(f): - func(line, line_num, data, errors) - f.close() + else: + for line_num, line in enumerate(lines): + func(line, line_num, data, errors) return (data, errors) def lineParser(self, line, line_num, data, errors):