summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-04-09 07:15:42 +0000
committerZac Medico <zmedico@gentoo.org>2008-04-09 07:15:42 +0000
commitedfd1dc6682e186ff36dba57cff960b1fec0800c (patch)
treea42dc52a8e11ac4387e5f703b834fe3e1dc05016 /pym
parent1a0b941b2c80fa569b31a578cbd933b6c0031d09 (diff)
downloadportage-edfd1dc6682e186ff36dba57cff960b1fec0800c.tar.gz
portage-edfd1dc6682e186ff36dba57cff960b1fec0800c.tar.bz2
portage-edfd1dc6682e186ff36dba57cff960b1fec0800c.zip
Create a new depgraph._dep_expand() method for select_files() to expand
atoms that have no category. svn path=/main/trunk/; revision=9765
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/__init__.py95
-rw-r--r--pym/portage/__init__.py4
2 files changed, 62 insertions, 37 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index a2b651fe9..33e2639da 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -2011,6 +2011,31 @@ class depgraph(object):
return 0
return 1
+ def _dep_expand(self, root_config, atom_without_category):
+ """
+ @param root_config: a root config instance
+ @type root_config: RootConfig
+ @returns: a list of cat/pn for any matching packages
+ """
+ null_cp = portage.dep_getkey(insert_category_into_atom(
+ atom_without_category, "null"))
+ cat, atom_pn = portage.catsplit(null_cp)
+
+ cp_set = set()
+ for db, pkg_type, built, installed, db_keys in \
+ self._filtered_trees[root_config.root]["dbs"]:
+ cp_set.update(db.cp_all())
+ for cp in list(cp_set):
+ cat, pn = portage.catsplit(cp)
+ if pn != atom_pn:
+ cp_set.discard(cp)
+ deps = []
+ for cp in cp_set:
+ cat, pn = portage.catsplit(cp)
+ deps.append(insert_category_into_atom(
+ atom_without_category, cat))
+ return deps
+
def _have_new_virt(self, root, atom_cp):
ret = False
for db, pkg_type, built, installed, db_keys in \
@@ -2185,44 +2210,40 @@ class depgraph(object):
args.append(AtomArg(arg=x, atom=x,
root_config=root_config))
continue
- try:
- try:
- for db, pkg_type, built, installed, db_keys in dbs:
- mykey = portage.dep_expand(x,
- mydb=db, settings=pkgsettings)
- if portage.dep_getkey(mykey).startswith("null/"):
- continue
- break
- except ValueError, e:
- if not e.args or not isinstance(e.args[0], list) or \
- len(e.args[0]) < 2:
- raise
- mykey = portage.dep_expand(x,
- mydb=vardb, settings=pkgsettings)
- cp = portage.dep_getkey(mykey)
- if cp.startswith("null/") or \
- 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:
- if not e.args or not isinstance(e.args[0], list) or \
- len(e.args[0]) < 2:
- raise
+ expanded_atoms = self._dep_expand(root_config, x)
+ installed_cp_set = set()
+ for atom in expanded_atoms:
+ if vardb.match(atom):
+ installed_cp_set.add(portage.dep_getkey(atom))
+ if len(expanded_atoms) > 1 and len(installed_cp_set) == 1:
+ installed_cp = iter(installed_cp_set).next()
+ expanded_atoms = [atom for atom in expanded_atoms \
+ if portage.dep_getkey(atom) == installed_cp]
+
+ if len(expanded_atoms) > 1:
print "\n\n!!! The short ebuild name \"" + x + "\" is ambiguous. Please specify"
print "!!! one of the following fully-qualified ebuild names instead:\n"
- for i in e.args[0]:
+ expanded_atoms = set(portage.dep_getkey(atom) \
+ for atom in expanded_atoms)
+ for i in sorted(expanded_atoms):
print " " + green(i)
print
return False, myfavorites
+ if expanded_atoms:
+ atom = expanded_atoms[0]
+ else:
+ null_atom = insert_category_into_atom(x, "null")
+ null_cp = portage.dep_getkey(null_atom)
+ cat, atom_pn = portage.catsplit(null_cp)
+ virts_p = root_config.settings.get_virts_p().get(atom_pn)
+ if virts_p:
+ virt_cp = portage.dep_getkey(virts_p[0])
+ atom = null_atom.replace(null_cp, virt_cp)
+ else:
+ atom = insert_category_into_atom(x, "null")
+
+ args.append(AtomArg(arg=x, atom=atom,
+ root_config=root_config))
if "--update" in self.myopts:
# Enable greedy SLOT atoms for atoms given as arguments.
@@ -5508,9 +5529,13 @@ def expand_virtual_atom(x):
@type x: String
@returns: the atom with virtual/ inserted for the category, or None
"""
- alphanum = re.search(r'\w', x)
+ return insert_category_into_atom(atom, "virtual")
+
+def insert_category_into_atom(atom, category):
+ alphanum = re.search(r'\w', atom)
if alphanum:
- ret = x[:alphanum.start()] + "virtual/" + x[alphanum.start():]
+ ret = atom[:alphanum.start()] + "%s/" % category + \
+ atom[alphanum.start():]
else:
ret = None
return ret
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index dbe02fba4..64414077a 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -2516,10 +2516,10 @@ class config(object):
self.already_in_regenerate = 0
- def get_virts_p(self, myroot):
+ def get_virts_p(self, myroot=None):
if self.virts_p:
return self.virts_p
- virts = self.getvirtuals(myroot)
+ virts = self.getvirtuals()
if virts:
for x in virts:
vkeysplit = x.split("/")