summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-06-01 11:48:54 -0700
committerZac Medico <zmedico@gentoo.org>2010-06-01 11:48:54 -0700
commitff845dd28b3a9b7bc29b28d168fb4f2e3fa392b6 (patch)
tree90d948b506d063214d4135e4badd68095f9c6a37
parentae229d84451f1751d33e02c743b82153431ed32e (diff)
downloadportage-ff845dd28b3a9b7bc29b28d168fb4f2e3fa392b6.tar.gz
portage-ff845dd28b3a9b7bc29b28d168fb4f2e3fa392b6.tar.bz2
portage-ff845dd28b3a9b7bc29b28d168fb4f2e3fa392b6.zip
Add special handling for updates of Package.metadata['USE'], so that
internal state is consistent.
-rw-r--r--pym/_emerge/Package.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index 9df7b644c..bba55ca8e 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -292,7 +292,7 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase):
__slots__ = ("_pkg",)
_wrapped_keys = frozenset(
- ["COUNTER", "INHERITED", "IUSE", "SLOT", "_mtime_"])
+ ["COUNTER", "INHERITED", "IUSE", "SLOT", "USE", "_mtime_"])
_use_conditional_keys = frozenset(
['LICENSE', 'PROPERTIES', 'PROVIDE', 'RESTRICT',])
@@ -301,7 +301,7 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase):
self._pkg = pkg
if not pkg.built:
# USE is lazy, but we want it to show up in self.keys().
- self['USE'] = ''
+ _PackageMetadataWrapperBase.__setitem__(self, 'USE', '')
self.update(metadata)
@@ -326,7 +326,7 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase):
'porttree'].dbapi.doebuild_settings
pkgsettings.setcpv(self._pkg)
v = pkgsettings["PORTAGE_USE"]
- self['USE'] = v
+ _PackageMetadataWrapperBase.__setitem__(self, 'USE', v)
return v
@@ -366,6 +366,18 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase):
v = 0
self._pkg.counter = v
+ def _set_use(self, k, v):
+ # Force regeneration of _use attribute
+ self._pkg._use = None
+ # Use raw metadata to restore USE conditional values
+ # to unevaluated state
+ raw_metadata = self._pkg._raw_metadata
+ for x in self._use_conditional_keys:
+ try:
+ self[x] = raw_metadata[x]
+ except KeyError:
+ pass
+
def _set__mtime_(self, k, v):
if isinstance(v, basestring):
try: