summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/__init__.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-05-26 23:03:35 +0000
committerZac Medico <zmedico@gentoo.org>2008-05-26 23:03:35 +0000
commit0d634f58ca101bed19335282e1e501e634764957 (patch)
tree00c9917801f003474eaaca5b21fe31438535ab5b /pym/_emerge/__init__.py
parent9d791e4cd797def40c51695355689105da4a8274 (diff)
downloadportage-0d634f58ca101bed19335282e1e501e634764957.tar.gz
portage-0d634f58ca101bed19335282e1e501e634764957.tar.bz2
portage-0d634f58ca101bed19335282e1e501e634764957.zip
Avoid triggering "cPickle.UnpicklingError: Global and instance pickles
are not supported." errors that are triggered when the pickle contains custom classes. svn path=/main/trunk/; revision=10431
Diffstat (limited to 'pym/_emerge/__init__.py')
-rw-r--r--pym/_emerge/__init__.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index e60dd212d..bf5c4aeea 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -1452,7 +1452,7 @@ class BlockerCache(DictMixin):
if not isinstance(counter, (int, long)):
invalid_items.add(k)
continue
- if not isinstance(atoms, list):
+ if not isinstance(atoms, (list, tuple)):
invalid_items.add(k)
continue
invalid_atom = False
@@ -1519,7 +1519,7 @@ class BlockerCache(DictMixin):
@type blocker_data: BlockerData
"""
self._cache_data["blockers"][cpv] = \
- (blocker_data.counter, blocker_data.atoms)
+ (blocker_data.counter, tuple(str(x) for x in blocker_data.atoms))
self._modified = True
def __iter__(self):
@@ -8472,7 +8472,17 @@ def action_build(settings, trees, mtimedb,
# XXX: Stored as a list for backward compatibility.
mtimedb["resume"]["myopts"] = \
[k for k in myopts if myopts[k] is True]
- mtimedb["resume"]["favorites"]=favorites
+
+ # Convert Atom instances to plain str since the mtimedb loader
+ # sets unpickler.find_global = None which causes unpickler.load()
+ # to raise the following exception:
+ #
+ # cPickle.UnpicklingError: Global and instance pickles are not supported.
+ #
+ # TODO: Maybe stop setting find_global = None, or find some other
+ # way to avoid accidental triggering of the above UnpicklingError.
+ mtimedb["resume"]["favorites"] = [str(x) for x in favorites]
+
if ("--digest" in myopts) and not ("--fetchonly" in myopts or "--fetch-all-uri" in myopts):
for pkgline in mydepgraph.altlist():
if pkgline[0]=="ebuild" and pkgline[3]=="merge":