summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-12-15 17:21:13 -0800
committerZac Medico <zmedico@gentoo.org>2010-12-16 01:03:40 -0800
commit68ec5f5a93b0e4e1d40fa3c162e9fbfb79be1688 (patch)
tree1eeefcf69117ba026fb6d3bd2697aa75d5f94014
parentd13ff44c0c14318a8a1fccc2ea7b69d295e32eb8 (diff)
downloadportage-68ec5f5a93b0e4e1d40fa3c162e9fbfb79be1688.tar.gz
portage-68ec5f5a93b0e4e1d40fa3c162e9fbfb79be1688.tar.bz2
portage-68ec5f5a93b0e4e1d40fa3c162e9fbfb79be1688.zip
highlight_violations: handle unversioned atom
A test case is included, which triggers the previously broken case.
-rw-r--r--pym/_emerge/resolver/slot_collision.py20
-rw-r--r--pym/portage/tests/resolver/test_slot_collisions.py12
2 files changed, 24 insertions, 8 deletions
diff --git a/pym/_emerge/resolver/slot_collision.py b/pym/_emerge/resolver/slot_collision.py
index ba76ed068..c51b9f734 100644
--- a/pym/_emerge/resolver/slot_collision.py
+++ b/pym/_emerge/resolver/slot_collision.py
@@ -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))
diff --git a/pym/portage/tests/resolver/test_slot_collisions.py b/pym/portage/tests/resolver/test_slot_collisions.py
index 9933979a3..348a06664 100644
--- a/pym/portage/tests/resolver/test_slot_collisions.py
+++ b/pym/portage/tests/resolver/test_slot_collisions.py
@@ -13,6 +13,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": { },
@@ -28,6 +30,8 @@ class SlotCollisionTestCase(TestCase):
#~ "app-misc/A-1": { "IUSE": "foo +bar", "REQUIRED_USE": "^^ ( foo bar )", "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" },
@@ -66,6 +70,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"],