paren_enclose: preserve atom USE conditionals
authorZac Medico <zmedico@gentoo.org>
Sun, 19 Dec 2010 17:57:18 +0000 (09:57 -0800)
committerZac Medico <zmedico@gentoo.org>
Sun, 19 Dec 2010 17:57:18 +0000 (09:57 -0800)
The depgraph sometimes uses paren_enclose to temporarily convert parts
of use_reduce output to a plain string. In these cases, we want to
preserve atom USE conditionals, since these sometimes make a difference
for IUSE checks during package matching (as in bug #348389).

pym/_emerge/depgraph.py
pym/portage/dep/__init__.py

index 4aec743b54eb7256e895bb69fecde61025ad67fc..7e47a46047e684e71c6181cbba0f50bab2ec02bb 100644 (file)
@@ -1188,7 +1188,8 @@ class depgraph(object):
                                if not dep_string:
                                        continue
 
-                               dep_string = portage.dep.paren_enclose(dep_string)
+                               dep_string = portage.dep.paren_enclose(dep_string,
+                                       unevaluated_atom=True)
 
                                if not self._add_pkg_dep_string(
                                        pkg, dep_root, dep_priority, dep_string,
@@ -1465,7 +1466,8 @@ class depgraph(object):
                """
                pkg, dep_root, dep_priority, dep_struct = \
                        self._dynamic_config._dep_disjunctive_stack.pop()
-               dep_string = portage.dep.paren_enclose(dep_struct)
+               dep_string = portage.dep.paren_enclose(dep_struct,
+                       unevaluated_atom=True)
                if not self._add_pkg_dep_string(
                        pkg, dep_root, dep_priority, dep_string, allow_unsatisfied):
                        return 0
index 52009fea3c09ea0de2bcea1382b8b9db354fdeb1..10f6d8234ea6613a2716f96c134a87ee2b91006c 100644 (file)
@@ -232,7 +232,7 @@ class paren_normalize(list):
                                        self._zap_parens(x, dest)
                return dest
 
-def paren_enclose(mylist):
+def paren_enclose(mylist, unevaluated_atom=False):
        """
        Convert a list to a string with sublists enclosed with parens.
 
@@ -251,6 +251,8 @@ def paren_enclose(mylist):
                if isinstance(x, list):
                        mystrparts.append("( "+paren_enclose(x)+" )")
                else:
+                       if unevaluated_atom:
+                               x = getattr(x, 'unevaluated_atom', x)
                        mystrparts.append(x)
        return " ".join(mystrparts)