Make depgraph.select_files() detect when a package name given as an argument
authorZac Medico <zmedico@gentoo.org>
Wed, 9 Apr 2008 07:29:34 +0000 (07:29 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 9 Apr 2008 07:29:34 +0000 (07:29 -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).
(trunk r9762)

svn path=/main/branches/2.1.2/; revision=9767

bin/emerge

index e14d7f283dfa3fcc924ecf026fe307a4e8ac1fd1..a747dce3fcb52edef750c7e71abd3046d290df52 100755 (executable)
@@ -2343,6 +2343,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:
@@ -5493,6 +5500,22 @@ def chk_updated_cfg_files(target_root, config_protect):
                                " section of the " + bold("emerge")
                        print " "+yellow("*")+" man page to learn how to update config files."
 
+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)