Make depgraph.select_files() detect when a package name given as an argument
authorZac Medico <zmedico@gentoo.org>
Wed, 9 Apr 2008 00:37:10 +0000 (00:37 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 9 Apr 2008 00:37:10 +0000 (00:37 -0000)
is ambiguous due to the existence of a new-style virtual with the same
name (cpv_expand() will not always raise a ValueError in cases like this).

svn path=/main/trunk/; revision=9762

pym/_emerge/__init__.py

index 955ab897900778f146d2914a4f1fde1f8a77f8cd..a2b651fe97fb4057404aae9482dd6ff171acddce 100644 (file)
@@ -2204,6 +2204,13 @@ class depgraph(object):
                                                        cp not in e[0]:
                                                        raise
                                                del e
+                                       virtual_x = expand_virtual_atom(x)
+                                       if virtual_x and \
+                                               self._have_new_virt(root_config.root,
+                                               portage.dep_getkey(virtual_x)) and \
+                                               virtual_x != mykey:
+                                               raise ValueError([portage.dep_getkey(virtual_x),
+                                                       portage.dep_getkey(mykey)])
                                        args.append(AtomArg(arg=x, atom=mykey,
                                                root_config=root_config))
                                except ValueError, e:
@@ -5492,6 +5499,22 @@ def checkUpdatedNewsItems(portdb, vardb, NEWS_PATH, UNREAD_PATH, repo_id):
        manager = NewsManager(portdb, vardb, NEWS_PATH, UNREAD_PATH)
        return manager.getUnreadItems( repo_id, update=True )
 
+def expand_virtual_atom(x):
+       """
+       Take an atom without a category and insert virtual/ for the
+       category. This works correctly with atoms that have operators.
+
+       @param x: an atom without a category
+       @type x: String
+       @returns: the atom with virtual/ inserted for the category, or None
+       """
+       alphanum = re.search(r'\w', x)
+       if alphanum:
+               ret = x[:alphanum.start()] + "virtual/" + x[alphanum.start():]
+       else:
+               ret = None
+       return ret
+
 def is_valid_package_atom(x):
        if "/" not in x:
                alphanum = re.search(r'\w', x)