REQUIRED_USE: fix parens display and test more
authorZac Medico <zmedico@gentoo.org>
Sat, 5 Feb 2011 00:16:15 +0000 (16:16 -0800)
committerZac Medico <zmedico@gentoo.org>
Sat, 5 Feb 2011 00:16:15 +0000 (16:16 -0800)
pym/portage/dep/__init__.py
pym/portage/tests/dep/testCheckRequiredUse.py

index 6b125f04c51761538e339793db845611a8912c2c..571f6c1c3447ee9983eb7b46b1d0368fcfa02377 100644 (file)
@@ -2217,7 +2217,8 @@ def check_required_use(required_use, use, iuse_match):
                                        if l:
                                                stack[level].append(satisfied)
 
-                                       if node._parent._operator not in ("||", "^^"):
+                                       if len(node._children) <= 1 or \
+                                               node._parent._operator not in ("||", "^^"):
                                                last_node = node._parent._children.pop()
                                                if last_node is not node:
                                                        raise AssertionError(
@@ -2242,7 +2243,16 @@ def check_required_use(required_use, use, iuse_match):
                                        if isinstance(node._children[0], _RequiredUseBranch):
                                                node._children[0]._parent = node._parent
                                                node = node._children[0]
-
+                                               if node._operator is None and \
+                                                       node._parent._operator not in ("||", "^^"):
+                                                       last_node = node._parent._children.pop()
+                                                       if last_node is not node:
+                                                               raise AssertionError(
+                                                                       "node is not last child of parent")
+                                                       for child in node._children:
+                                                               node._parent._children.append(child)
+                                                               if isinstance(child, _RequiredUseBranch):
+                                                                       child._parent = node._parent
                                else:
                                        for index, child in enumerate(node._children):
                                                if isinstance(child, _RequiredUseBranch) and \
@@ -2287,13 +2297,6 @@ def check_required_use(required_use, use, iuse_match):
                raise InvalidDependString(
                        _("malformed syntax: '%s'") % required_use)
 
-       if len(tree._children) == 1:
-               child = tree._children[0]
-               if isinstance(child, _RequiredUseBranch) and \
-                       child._operator is None:
-                       tree = child
-                       tree._parent = None
-
        tree._satisfied = False not in stack[0]
        return tree
 
index a0e10b1e7325e5d4a1a7c8feb10c0cafd8d1a0c0..54791e016b467ff59c3a821dd0779647fb684fd5 100644 (file)
@@ -191,6 +191,11 @@ class TestCheckRequiredUse(TestCase):
                                ["a", "b", "c", "d"],
                                ""
                        ),
+                       (
+                               "( ( ( a ) ) ( ( ( b c ) ) ) )",
+                               [""],
+                               "a b c"
+                       ),
                        (
                                "|| ( ( ( ( a ) ) ( ( ( b c ) ) ) ) )",
                                [""],
@@ -200,7 +205,12 @@ class TestCheckRequiredUse(TestCase):
                                "|| ( ( a ( ( ) ( ) ) ( ( ) ) ( b ( ) c ) ) )",
                                [""],
                                "a b c"
-                       )
+                       ),
+                       (
+                               "|| ( ( a b c ) ) || ( ( d e f ) )",
+                               [""],
+                               "a b c d e f"
+                       ),
                )
                for required_use, use, expected in test_cases:
                        result = check_required_use(required_use, use, lambda k: True).tounicode()