public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/env/
@ 2013-10-02 10:39 Arfrever Frehtes Taifersar Arahesis
  0 siblings, 0 replies; only message in thread
From: Arfrever Frehtes Taifersar Arahesis @ 2013-10-02 10:39 UTC (permalink / raw
  To: gentoo-commits

commit:     5924b7afae7c731abc24a0e16fcd103e680e3e5b
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Wed Oct  2 10:36:49 2013 +0000
Commit:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
CommitDate: Wed Oct  2 10:36:49 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5924b7af

Bug #418475: Handle PermissionError caused by unreadable /etc/portage/modules.

---
 pym/portage/env/loaders.py | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/pym/portage/env/loaders.py b/pym/portage/env/loaders.py
index 372bc12..f869884 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):


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-10-02 10:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-02 10:39 [gentoo-commits] proj/portage:master commit in: pym/portage/env/ Arfrever Frehtes Taifersar Arahesis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox