aboutsummaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorJason Stubbs <jstubbs@gentoo.org>2005-05-05 05:08:26 +0000
committerJason Stubbs <jstubbs@gentoo.org>2005-05-05 05:08:26 +0000
commit3e42f93665c52600937883e50adecb5273c063c3 (patch)
treec66bf7859335921dbc2e203c514e13d6c67122d0 /pym
parentAdded full support for OR-based dependencies. Still need to sort out (diff)
downloadportage-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.py28
-rw-r--r--pym/portage_syntax.py3
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