fix a bug in enalyze rebuild where it did not consider IUSE defaults for calculating...
authorBrian Dolbec <dolsen@gentoo.org>
Thu, 7 Jun 2012 07:57:44 +0000 (00:57 -0700)
committerBrian Dolbec <dolsen@gentoo.org>
Thu, 7 Jun 2012 07:57:44 +0000 (00:57 -0700)
pym/gentoolkit/enalyze/lib.py
pym/gentoolkit/flag.py

index 015e23b3e9247c8786ef1d12aa2db4d049405c90..9dc28a35f5b4dc151e51c48e238519f37e26a5e3 100644 (file)
@@ -14,7 +14,7 @@ from gentoolkit.dbapi import PORTDB, VARDB
 from gentoolkit import errors
 from gentoolkit.keyword import reduce_keywords
 from gentoolkit.flag import (reduce_flags, get_flags, get_all_cpv_use,
-       filter_flags, get_installed_use, get_iuse)
+       filter_flags, get_installed_use, get_iuse, defaulted_flags)
 #from gentoolkit.package import Package
 
 import portage
@@ -65,10 +65,12 @@ class FlagAnalyzer(object):
                @return (plus, minus, unset) sets of USE flags
                """
                installed = set(self.get_used(cpv, self.target))
-               iuse =  set(reduce_flags(self.get_flags(cpv)))
-               return self._analyse(installed, iuse)
+               _iuse = self.get_flags(cpv)
+               iuse =  set(reduce_flags(_iuse))
+               iuse_defaults = defaulted_flags(_iuse)
+               return self._analyse(installed, iuse, iuse_defaults)
 
-       def _analyse(self, installed, iuse):
+       def _analyse(self, installed, iuse, iuse_defaults):
                """Analyzes the supplied info and returns the flag settings
                that differ from the defaults
 
@@ -78,6 +80,9 @@ class FlagAnalyzer(object):
                @param iuse: the current ebuilds IUSE
                """
                defaults = self.system.intersection(iuse)
+               # update defaults with iuse_defaults
+               defaults.update(iuse_defaults['+'])
+               defaults = defaults.difference(iuse_defaults['-'])
                usedflags = iuse.intersection(set(installed))
                if self.filter_defaults:
                        plus = usedflags.difference(defaults)
@@ -98,10 +103,12 @@ class FlagAnalyzer(object):
                @return (plus, minus, unset) sets of USE flags
                """
                installed = set(self.pkg_used(pkg))
-               print("installed =", installed)
-               iuse =  set(reduce_flags(self.pkg_flags(pkg)))
-               print("iuse =", iuse)
-               return self._analyse(installed, iuse)
+               #print("installed =", installed)
+               _iuse =  self.pkg_flags(pkg)
+               iuse =  set(reduce_flags(_iuse))
+               iuse_defaults = defaulted_flags(_iuse)
+               #print("iuse =", iuse)
+               return self._analyse(installed, iuse, iuse_defaults)
 
        def pkg_used(self, pkg):
                if self.target == "USE":
index b5c8228f6e4e07e7f4b5af1aaba4dc846a8cb45a..0377a813f64ecfc1ffc5319636a090de92739052 100644 (file)
@@ -13,6 +13,7 @@ __all__ = (
        'get_installed_use',
        'reduce_flag',
        'reduce_flags',
+       'defaulted_flags',
        'filter_flags',
        'get_all_cpv_use',
        'get_flags'
@@ -84,6 +85,21 @@ def reduce_flags(the_list):
        return r
 
 
+def defaulted_flags(the_list):
+       """Absolute value function for a USE flag list
+
+       @type the_list: list
+       @param the_list: the use flags to get defaulted ones from.
+       @rtype: dict of lists
+       @return defaulted USE flags {'+': [...], '-': [...]}
+       """
+       r={"+":[], "-": []}
+       for member in the_list:
+               if member[0] in  ["+","-"]:
+                       r[member[0]].append(member[1:])
+       return r
+
+
 def filter_flags(use, use_expand_hidden, usemasked, useforced):
        """Filter function to remove hidden or otherwise not normally
        visible USE flags from a list.