diff options
author | Jason Stubbs <jstubbs@gentoo.org> | 2005-05-05 05:08:26 +0000 |
---|---|---|
committer | Jason Stubbs <jstubbs@gentoo.org> | 2005-05-05 05:08:26 +0000 |
commit | 3e42f93665c52600937883e50adecb5273c063c3 (patch) | |
tree | c66bf7859335921dbc2e203c514e13d6c67122d0 /pym | |
parent | Added full support for OR-based dependencies. Still need to sort out (diff) | |
download | portage-cvs-3e42f93665c52600937883e50adecb5273c063c3.tar.gz portage-cvs-3e42f93665c52600937883e50adecb5273c063c3.tar.bz2 portage-cvs-3e42f93665c52600937883e50adecb5273c063c3.zip |
pym/portage_syntax.py: Added with_key() method to Atom for creating a new
atom of a different key with the same constraints.
bin/test_target_graph.py pym/portage_dep.py: Added transform_virtuals()
function to just that. Added testing code to show how it is used. Renamed
TargetGraph to StateGraph.
Diffstat (limited to 'pym')
-rw-r--r-- | pym/portage_dep.py | 28 | ||||
-rw-r--r-- | pym/portage_syntax.py | 3 |
2 files changed, 27 insertions, 4 deletions
diff --git a/pym/portage_dep.py b/pym/portage_dep.py index bb2669d..b348531 100644 --- a/pym/portage_dep.py +++ b/pym/portage_dep.py @@ -1,8 +1,8 @@ # deps.py -- Portage dependency resolution functions # Copyright 2003-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /local/data/ulm/cvs/history/var/cvsroot/gentoo-src/portage/pym/portage_dep.py,v 1.33 2005/05/05 03:34:02 jstubbs Exp $ -cvs_id_string="$Id: portage_dep.py,v 1.33 2005/05/05 03:34:02 jstubbs Exp $"[5:-2] +# $Header: /local/data/ulm/cvs/history/var/cvsroot/gentoo-src/portage/pym/portage_dep.py,v 1.34 2005/05/05 05:08:26 jstubbs Exp $ +cvs_id_string="$Id: portage_dep.py,v 1.34 2005/05/05 05:08:26 jstubbs Exp $"[5:-2] # DEPEND SYNTAX: # @@ -717,7 +717,27 @@ def transform_dependspec(dependspec, prefdict): return dotransform(dependspec, prefdict)[1] -class TargetGraph(object): +def transform_virtuals(pkg, dependspec, virtuals): + dependspec = copy.copy(dependspec) + elements = dependspec.elements + dependspec.elements = [] + for element in elements: + if isinstance(element, portage_syntax.DependSpec): + dependspec.elements.append(transform_virtuals(pkg, element, virtuals)) + elif element.cpv.key not in virtuals: + dependspec.elements.append(element) + else: + subdepspec = portage_syntax.DependSpec(element_class=portage_syntax.Atom) + subdepspec.preferential = True + for virtual in virtuals[element.cpv.key]: + atom = element.with_key(virtual) + if not atom.match(pkg): + subdepspec.add_element(element.with_key(virtual)) + dependspec.elements.append(subdepspec) + return dependspec + + +class StateGraph(object): def __init__(self): # key : (bool, [GluePkg], [GluePkg], [Atom], [Atom]) @@ -898,7 +918,7 @@ class TargetGraph(object): else: checks[atom.cpv.key] = True else: - for idx in range(self.preferential_atoms[key]): + for idx in range(len(self.preferential_atoms[key])): if self.preferential_atoms[key][idx][0] == pkg: for atomlist in self.preferential_atoms[key][idx][1]: for atom in atomlist: diff --git a/pym/portage_syntax.py b/pym/portage_syntax.py index 7dee730..1694896 100644 --- a/pym/portage_syntax.py +++ b/pym/portage_syntax.py @@ -333,6 +333,9 @@ class Atom(object): #else: return False + def with_key(self, key): + return Atom(self.atomstr.replace(self.cpv.key, key)) + def intersects(self, atom): if self == atom: return True |