From ff845dd28b3a9b7bc29b28d168fb4f2e3fa392b6 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 1 Jun 2010 11:48:54 -0700 Subject: Add special handling for updates of Package.metadata['USE'], so that internal state is consistent. --- pym/_emerge/Package.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py index 9df7b644..bba55ca8 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: -- cgit v1.2.3-65-gdbad