Fix the filtering for bug #215016:
authorZac Medico <zmedico@gentoo.org>
Sat, 12 Apr 2008 20:37:49 +0000 (20:37 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 12 Apr 2008 20:37:49 +0000 (20:37 -0000)
* fix broken comparison for he iuse filtering
* filter out any duplicates that variable may contain
(trunk r9858)

svn path=/main/branches/2.1.2/; revision=9859

pym/portage.py

index b4c200bf5e3cbe1d3421a0123cfd275f56efa967..8b0c123e5ceb4117850e1aedfc0b9c221a6966f9 100644 (file)
@@ -2106,19 +2106,16 @@ class config:
                        has_wildcard = "*" in var_split
                        if has_wildcard:
                                var_split = [ x for x in var_split if x != "*" ]
-                       has_iuse = False
+                       has_iuse = set()
                        for x in iuse_implicit:
                                if x.startswith(prefix):
-                                       has_iuse = True
-                                       break
+                                       has_iuse.add(x[prefix_len:])
                        if has_wildcard:
                                # * means to enable everything in IUSE that's not masked
                                if has_iuse:
                                        for x in iuse_implicit:
                                                if x.startswith(prefix) and x not in self.usemask:
                                                        suffix = x[prefix_len:]
-                                                       if suffix in var_split:
-                                                               continue
                                                        var_split.append(suffix)
                                                        use.add(x)
                                else:
@@ -2126,7 +2123,17 @@ class config:
                                        # LINGUAS should be unset so that all .mo files are
                                        # installed.
                                        var_split = []
-                       var_split = [x for x in var_split if x in iuse_implicit]
+                       # Make the flags unique and filter them according to IUSE.
+                       # Also, continue to preserve order for things like LINGUAS
+                       # and filter any duplicates that variable may contain.
+                       filtered_var_split = []
+                       remaining = has_iuse.intersection(var_split)
+                       for x in var_split:
+                               if x in remaining:
+                                       remaining.remove(x)
+                                       filtered_var_split.append(x)
+                       var_split = filtered_var_split
+
                        if var_split:
                                self[var] = " ".join(var_split)
                        else: