highlight_violations: handle unversioned atom
authorZac Medico <zmedico@gentoo.org>
Thu, 16 Dec 2010 01:21:13 +0000 (17:21 -0800)
committerZac Medico <zmedico@gentoo.org>
Thu, 16 Dec 2010 01:21:13 +0000 (17:21 -0800)
A test case is included, which triggers the previously broken case.

pym/_emerge/resolver/slot_collision.py
pym/portage/tests/resolver/test_slot_collisions.py

index ba76ed06895bad1ffd0f059f08cb326fae346c2f..c51b9f734e4ba53c7370fb1f837f28ea3fdaeedf 100644 (file)
@@ -296,20 +296,24 @@ class slot_conflict_handler(object):
                                                atom_str = str(atom)
                                                if version:
                                                        op = atom.operator
-                                                       ver = cpv_getversion(atom.cpv)
+                                                       ver = None
+                                                       if atom.cp != atom.cpv:
+                                                               ver = cpv_getversion(atom.cpv)
                                                        slot = atom.slot
 
                                                        if op == "=*":
                                                                op = "="
                                                                ver += "*"
 
-                                                       atom_str = atom_str.replace(op, colorize("BAD", op), 1)
-                                                       
-                                                       start = atom_str.rfind(ver)
-                                                       end = start + len(ver)
-                                                       atom_str = atom_str[:start] + \
-                                                               colorize("BAD", ver) + \
-                                                               atom_str[end:]
+                                                       if op is not None:
+                                                               atom_str = atom_str.replace(op, colorize("BAD", op), 1)
+
+                                                       if ver is not None:
+                                                               start = atom_str.rfind(ver)
+                                                               end = start + len(ver)
+                                                               atom_str = atom_str[:start] + \
+                                                                       colorize("BAD", ver) + \
+                                                                       atom_str[end:]
                                                        if slot:
                                                                atom_str = atom_str.replace(":" + slot, colorize("BAD", ":" + slot))
                                                
index 7d51f9847d03aaa952d27f40c8a305dfc90a9769..ad1ee65c6db2829ba877ea00aa17e8245b0123c8 100644 (file)
@@ -15,6 +15,8 @@ class SlotCollisionTestCase(TestCase):
                        "dev-libs/B-1": { "IUSE": "foo" },
                        "dev-libs/C-1": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
                        "dev-libs/D-1": { "DEPEND": "dev-libs/A[foo=] dev-libs/B[foo=]", "IUSE": "foo", "EAPI": 2 },
+                       "dev-libs/E-1": {  },
+                       "dev-libs/E-2": { "IUSE": "foo" },
 
                        "app-misc/Z-1": { },
                        "app-misc/Z-2": { },
@@ -30,6 +32,8 @@ class SlotCollisionTestCase(TestCase):
                        "app-misc/A-1": { "IUSE": "foo +bar", "REQUIRED_USE": "^^ ( foo bar )", "EAPI": EAPI_4 },
                        "app-misc/B-1": { "DEPEND": "=app-misc/A-1[foo=]", "IUSE": "foo", "EAPI": 2 },
                        "app-misc/C-1": { "DEPEND": "=app-misc/A-1[foo]", "EAPI": 2 },
+                       "app-misc/E-1": { "RDEPEND": "dev-libs/E[foo?]", "IUSE": "foo", "EAPI": "2" },
+                       "app-misc/F-1": { "RDEPEND": "=dev-libs/E-1", "IUSE": "foo", "EAPI": "2" },
                        }
                installed = {
                        "dev-libs/A-1": { "PDEPEND": "foo? ( dev-libs/B )", "IUSE": "foo", "USE": "foo" }, 
@@ -68,6 +72,14 @@ class SlotCollisionTestCase(TestCase):
                                slot_collision_solutions = []
                                ),
 
+                       ResolverPlaygroundTestCase(
+                               ["=app-misc/E-1", "=app-misc/F-1"],
+                               success = False,
+                               mergelist = ["dev-libs/E-1", "dev-libs/E-2", "app-misc/E-1", "app-misc/F-1"],
+                               ignore_mergelist_order = True,
+                               slot_collision_solutions = []
+                               ),
+
                        #Simple cases.
                        ResolverPlaygroundTestCase(
                                ["sci-libs/L", "sci-libs/M"],