Handle unpickle AttributeError (bug #381705).
authorZac Medico <zmedico@gentoo.org>
Sat, 3 Sep 2011 18:39:05 +0000 (11:39 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 3 Sep 2011 18:39:05 +0000 (11:39 -0700)
pym/_emerge/BlockerCache.py
pym/portage/dbapi/vartree.py
pym/portage/getbinpkg.py
pym/portage/util/_dyn_libs/PreservedLibsRegistry.py
pym/portage/util/mtimedb.py

index 5c4f43e520dc5b148cfc315874906a9687129837..8a1c884784a0043420941664c0b171e2df98d2e8 100644 (file)
@@ -1,6 +1,7 @@
-# Copyright 1999-2009 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+import errno
 import sys
 from portage.util import writemsg
 from portage.data import secpass
@@ -58,8 +59,11 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                        self._cache_data = mypickle.load()
                        f.close()
                        del f
-               except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError) as e:
-                       if isinstance(e, pickle.UnpicklingError):
+               except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
+                       if isinstance(e, EnvironmentError) and \
+                               getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
+                               pass
+                       else:
                                writemsg("!!! Error loading '%s': %s\n" % \
                                        (self._cache_filename, str(e)), noiselevel=-1)
                        del e
index ba2cc0886e789455481e064d7c02d27dfa49bf45..4df0576a4d07f07696e1243753d3aefaa7f1b242 100644 (file)
@@ -555,8 +555,11 @@ class vardbapi(dbapi):
                        aux_cache = mypickle.load()
                        f.close()
                        del f
-               except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError) as e:
-                       if isinstance(e, pickle.UnpicklingError):
+               except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
+                       if isinstance(e, EnvironmentError) and \
+                               getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
+                               pass
+                       else:
                                writemsg(_unicode_decode(_("!!! Error loading '%s': %s\n")) % \
                                        (self._aux_cache_filename, e), noiselevel=-1)
                        del e
index a511f51ff0dbe46fec2f9171924f4779d59c64a8..a83e2a51cc20f76328d707cb606219bd3fcd6572 100644 (file)
@@ -542,7 +542,7 @@ def dir_get_metadata(baseurl, conn=None, chunk_size=3000, verbose=1, usingcache=
                out.write(_("Loaded metadata pickle.\n"))
                out.flush()
                metadatafile.close()
-       except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError):
+       except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError):
                metadata = {}
        if baseurl not in metadata:
                metadata[baseurl]={}
index b916051a1f5dfd4483f7f5fd30a2e7460c2baec1..a1814981d6da7d28029f11fa358da764cf71dead 100644 (file)
@@ -60,7 +60,7 @@ class PreservedLibsRegistry(object):
                        f = open(_unicode_encode(self._filename,
                                        encoding=_encodings['fs'], errors='strict'), 'rb')
                        self._data = pickle.load(f)
-               except (ValueError, pickle.UnpicklingError) as e:
+               except (AttributeError, ValueError, pickle.UnpicklingError) as e:
                        writemsg_level(_("!!! Error loading '%s': %s\n") % \
                                (self._filename, e), level=logging.ERROR, noiselevel=-1)
                except (EOFError, IOError) as e:
index 67f93e819816cbc5895904e8be5cc338c95701ce..bc4f97c53f2b83f575d2af5aa03630e3e48cc267 100644 (file)
@@ -9,6 +9,7 @@ try:
 except ImportError:
        import pickle
 
+import errno
 import portage
 from portage import _unicode_encode
 from portage.data import portage_gid, uid
@@ -33,8 +34,11 @@ class MtimeDB(dict):
                        d = mypickle.load()
                        f.close()
                        del f
-               except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError) as e:
-                       if isinstance(e, pickle.UnpicklingError):
+               except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
+                       if isinstance(e, EnvironmentError) and \
+                               getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
+                               pass
+                       else:
                                writemsg(_("!!! Error loading '%s': %s\n") % \
                                        (filename, str(e)), noiselevel=-1)
                        del e