* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/pkgcorepm/, gentoopm/paludispm/, gentoopm/basepm/
@ 2011-07-26 7:24 Michał Górny
0 siblings, 0 replies; 2+ messages in thread
From: Michał Górny @ 2011-07-26 7:24 UTC (permalink / raw
To: gentoo-commits
commit: 4abd8b9f4ad5b2dc09a743de74ebb9d4393cf5dd
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 26 06:54:49 2011 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 26 06:54:49 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=4abd8b9f
Iterate over raw dependency trees instead.
---
gentoopm/basepm/depend.py | 35 +++++++++++++++++-------------
gentoopm/paludispm/depend.py | 48 +++++++++++++++++++++--------------------
gentoopm/pkgcorepm/depend.py | 39 +++++++++++++++++----------------
gentoopm/pkgcorepm/pkg.py | 6 ++--
4 files changed, 68 insertions(+), 60 deletions(-)
diff --git a/gentoopm/basepm/depend.py b/gentoopm/basepm/depend.py
index f1245c1..78e5c02 100644
--- a/gentoopm/basepm/depend.py
+++ b/gentoopm/basepm/depend.py
@@ -7,34 +7,39 @@ from abc import abstractmethod, abstractproperty
from gentoopm.util import ABCObject
-class PMPackageDepSet(ABCObject):
+class PMBaseDep(ABCObject):
"""
- A base class representing a depset of a single package.
+ Base class for a dependency list holder.
"""
+ @abstractmethod
def __iter__(self):
- raise NotImplementedError('Working with raw depsets is not supported')
-
- @abstractproperty
- def evaluated(self):
"""
- Get the evaluated depset (i.e. with all conditionals and one-of sets
- collapsed).
+ Iterate over dependency items.
- @type: L{PMPackageFinalDepSet}
+ @rtype: iter(L{PMBaseDep},L{PMAtom})
"""
pass
-class PMPackageFinalDepSet(ABCObject):
+class PMConditionalDep(PMBaseDep):
"""
- A base class representing a collapsed depset.
+ A conditional dependency set (enabled by a condition of some kind).
"""
- @abstractmethod
- def __iter__(self):
+ @abstractproperty
+ def enabled(self):
"""
- Iterate over dependency atoms.
+ Whether the dependency set is enabled (the condition is met).
- @rtype: iter(L{PMAtom})
+ @type: bool
"""
pass
+
+class PMOneOfDep(PMBaseDep):
+ pass
+
+class PMPackageDepSet(PMBaseDep):
+ """
+ A base class representing a depset of a single package.
+ """
+ pass
diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py
index 2c564a5..87a9356 100644
--- a/gentoopm/paludispm/depend.py
+++ b/gentoopm/paludispm/depend.py
@@ -5,40 +5,42 @@
import paludis
-from gentoopm.basepm.depend import PMPackageDepSet, \
- PMPackageFinalDepSet
+from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
+ PMOneOfDep, PMBaseDep
from gentoopm.paludispm.atom import PaludisAtom
-class PaludisPackageDepSet(PMPackageDepSet):
+class PaludisBaseDep(PMBaseDep):
def __init__(self, deps, pkg):
self._deps = deps
self._pkg = pkg
- @property
- def evaluated(self):
- return PaludisPackageFinalDepSet(
- self._deps, self._pkg)
-
-class PaludisPackageFinalDepSet(PMPackageFinalDepSet):
- def __init__(self, deps, pkg):
- self._deps = deps
- self._pkg = pkg
-
- def _ideps(self, deps):
- for d in deps:
+ def __iter__(self):
+ for d in self._deps:
if isinstance(d, paludis.PackageDepSpec):
yield PaludisAtom(d, self._pkg._env)
elif isinstance(d, paludis.AnyDepSpec):
- # XXX, use something better here
- for a in self._ideps((next(iter(d)),)):
- yield a
+ yield PaludisOneOfDep(d, self._pkg)
elif isinstance(d, paludis.ConditionalDepSpec):
- if d.condition_met(self._pkg._env, self._pkg._pkg):
- for a in self._ideps(d):
- yield a
+ yield PaludisConditionalDep(d, self._pkg)
else:
raise NotImplementedError('Unable to parse %s' % repr(d))
+class PaludisOneOfDep(PMOneOfDep, PaludisBaseDep):
+ pass
+
+class PaludisConditionalDep(PMConditionalDep, PaludisBaseDep):
+ @property
+ def enabled(self):
+ return self._deps.condition_met(self._pkg._env, self._pkg._pkg)
+
+class PaludisPackageDepSet(PMPackageDepSet, PaludisBaseDep):
def __iter__(self):
- for r in self._ideps(self._deps):
- yield r
+ for d in self._deps:
+ if isinstance(d, paludis.PackageDepSpec):
+ yield PaludisAtom(d, self._pkg._env)
+ elif isinstance(d, paludis.AnyDepSpec):
+ yield PaludisOneOfDep(d, self._pkg)
+ elif isinstance(d, paludis.ConditionalDepSpec):
+ yield PaludisConditionalDep(d, self._pkg)
+ else:
+ raise NotImplementedError('Unable to parse %s' % repr(d))
diff --git a/gentoopm/pkgcorepm/depend.py b/gentoopm/pkgcorepm/depend.py
index 80d697b..5c38500 100644
--- a/gentoopm/pkgcorepm/depend.py
+++ b/gentoopm/pkgcorepm/depend.py
@@ -5,35 +5,36 @@
from pkgcore.ebuild.atom import atom
from pkgcore.restrictions.boolean import OrRestriction
+from pkgcore.restrictions.packages import Conditional
-from gentoopm.basepm.depend import PMPackageDepSet, PMPackageFinalDepSet
+from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
+ PMOneOfDep, PMBaseDep
from gentoopm.pkgcorepm.atom import PkgCoreAtom
-class PkgCorePackageDepSet(PMPackageDepSet):
+class PkgCoreBaseDep(PMBaseDep):
def __init__(self, deps, pkg):
self._deps = deps
self._pkg = pkg
- @property
- def evaluated(self):
- return PkgCorePackageFinalDepSet(
- self._deps.evaluate_depset(self._pkg.use))
-
-class PkgCorePackageFinalDepSet(PMPackageFinalDepSet):
- def __init__(self, deps):
- self._deps = deps
-
- def _iter_deps(self, deps):
- for d in deps:
+ def __iter__(self):
+ for d in self._deps:
if isinstance(d, atom):
- yield d
+ yield PkgCoreAtom(d)
elif isinstance(d, OrRestriction):
- for d in self._iter_deps((next(iter(d)),)): # XXX
- yield d
+ yield PkgCoreOneOfDep(d, self._pkg)
+ elif isinstance(d, Conditional) and d.attr == 'use':
+ yield PkgCoreConditionalUseDep(d, self._pkg)
else:
raise NotImplementedError('Parsing %s not implemented' \
% repr(d))
- def __iter__(self):
- for d in self._iter_deps(self._deps):
- yield PkgCoreAtom(d)
+class PkgCoreOneOfDep(PMOneOfDep, PkgCoreBaseDep):
+ pass
+
+class PkgCoreConditionalUseDep(PMConditionalDep, PkgCoreBaseDep):
+ @property
+ def enabled(self):
+ return self._deps.restriction.match(self._pkg.use)
+
+class PkgCorePackageDepSet(PMPackageDepSet, PkgCoreBaseDep):
+ pass
diff --git a/gentoopm/pkgcorepm/pkg.py b/gentoopm/pkgcorepm/pkg.py
index d50d0fe..d586349 100644
--- a/gentoopm/pkgcorepm/pkg.py
+++ b/gentoopm/pkgcorepm/pkg.py
@@ -88,17 +88,17 @@ class PkgCorePackage(PMPackage, PkgCoreAtom):
@property
def build_dependencies(self):
- return PkgCorePackageDepSet(self._pkg.depends,
+ return PkgCorePackageDepSet(self._pkg._raw_pkg.depends,
self._pkg)
@property
def run_dependencies(self):
- return PkgCorePackageDepSet(self._pkg.rdepends,
+ return PkgCorePackageDepSet(self._pkg._raw_pkg.rdepends,
self._pkg)
@property
def post_dependencies(self):
- return PkgCorePackageDepSet(self._pkg.pdepends,
+ return PkgCorePackageDepSet(self._pkg._raw_pkg.pdepends,
self._pkg)
def __str__(self):
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/pkgcorepm/, gentoopm/paludispm/, gentoopm/basepm/
@ 2011-07-26 16:36 Michał Górny
0 siblings, 0 replies; 2+ messages in thread
From: Michał Górny @ 2011-07-26 16:36 UTC (permalink / raw
To: gentoo-commits
commit: 246a193cdf206aebd205e9e9db4d3ac3421e6169
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 26 16:24:47 2011 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 26 16:24:47 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=246a193c
Support '( a b ... )' dep blocks as well.
---
gentoopm/basepm/depend.py | 22 +++++++++++++++++-----
gentoopm/paludispm/depend.py | 18 +++++++-----------
gentoopm/pkgcorepm/depend.py | 14 ++++++++++++--
3 files changed, 36 insertions(+), 18 deletions(-)
diff --git a/gentoopm/basepm/depend.py b/gentoopm/basepm/depend.py
index e504594..8d7005d 100644
--- a/gentoopm/basepm/depend.py
+++ b/gentoopm/basepm/depend.py
@@ -26,11 +26,11 @@ class PMBaseDep(ABCObject):
"""
Return the depspec with all conditionals resolved.
- @type: L{PMUncondDep}
+ @type: L{PMUncondAllOfDep}
"""
pass
-class PMUncondDep(PMBaseDep):
+class PMUncondBaseDep(PMBaseDep):
def __init__(self, parent):
self._parent = parent
@@ -59,7 +59,7 @@ class PMConditionalDep(PMBaseDep):
@property
def without_conditionals(self):
- return PMUncondDep((self,))
+ return PMUncondAllOfDep((self,))
@abstractproperty
def enabled(self):
@@ -70,6 +70,18 @@ class PMConditionalDep(PMBaseDep):
"""
pass
+class PMAllOfDep(PMBaseDep):
+ """
+ An all-of dependency block (C{( ... ... )}).
+ """
+
+ @property
+ def without_conditionals(self):
+ return PMUncondAllOfDep(self)
+
+class PMUncondAllOfDep(PMAllOfDep, PMUncondBaseDep):
+ pass
+
class PMOneOfDep(PMBaseDep):
"""
A one-of dependency set (C{|| ( ... )}).
@@ -79,7 +91,7 @@ class PMOneOfDep(PMBaseDep):
def without_conditionals(self):
return PMUncondOneOfDep(self)
-class PMUncondOneOfDep(PMOneOfDep, PMUncondDep):
+class PMUncondOneOfDep(PMOneOfDep, PMUncondBaseDep):
pass
class PMPackageDepSet(PMBaseDep):
@@ -89,4 +101,4 @@ class PMPackageDepSet(PMBaseDep):
@property
def without_conditionals(self):
- return PMUncondDep(self)
+ return PMUncondAllOfDep(self)
diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py
index 87a9356..ab23d27 100644
--- a/gentoopm/paludispm/depend.py
+++ b/gentoopm/paludispm/depend.py
@@ -6,7 +6,7 @@
import paludis
from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
- PMOneOfDep, PMBaseDep
+ PMOneOfDep, PMAllOfDep, PMBaseDep
from gentoopm.paludispm.atom import PaludisAtom
class PaludisBaseDep(PMBaseDep):
@@ -20,6 +20,8 @@ class PaludisBaseDep(PMBaseDep):
yield PaludisAtom(d, self._pkg._env)
elif isinstance(d, paludis.AnyDepSpec):
yield PaludisOneOfDep(d, self._pkg)
+ elif isinstance(d, paludis.AllDepSpec):
+ yield PaludisAllOfDep(d, self._pkg)
elif isinstance(d, paludis.ConditionalDepSpec):
yield PaludisConditionalDep(d, self._pkg)
else:
@@ -28,19 +30,13 @@ class PaludisBaseDep(PMBaseDep):
class PaludisOneOfDep(PMOneOfDep, PaludisBaseDep):
pass
+class PaludisAllOfDep(PMAllOfDep, PaludisBaseDep):
+ pass
+
class PaludisConditionalDep(PMConditionalDep, PaludisBaseDep):
@property
def enabled(self):
return self._deps.condition_met(self._pkg._env, self._pkg._pkg)
class PaludisPackageDepSet(PMPackageDepSet, PaludisBaseDep):
- def __iter__(self):
- for d in self._deps:
- if isinstance(d, paludis.PackageDepSpec):
- yield PaludisAtom(d, self._pkg._env)
- elif isinstance(d, paludis.AnyDepSpec):
- yield PaludisOneOfDep(d, self._pkg)
- elif isinstance(d, paludis.ConditionalDepSpec):
- yield PaludisConditionalDep(d, self._pkg)
- else:
- raise NotImplementedError('Unable to parse %s' % repr(d))
+ pass
diff --git a/gentoopm/pkgcorepm/depend.py b/gentoopm/pkgcorepm/depend.py
index eaa6333..78689b3 100644
--- a/gentoopm/pkgcorepm/depend.py
+++ b/gentoopm/pkgcorepm/depend.py
@@ -4,11 +4,11 @@
# Released under the terms of the 2-clause BSD license.
from pkgcore.ebuild.atom import atom
-from pkgcore.restrictions.boolean import OrRestriction
+from pkgcore.restrictions.boolean import OrRestriction, AndRestriction
from pkgcore.restrictions.packages import Conditional
from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
- PMOneOfDep, PMBaseDep
+ PMOneOfDep, PMAllOfDep, PMBaseDep
from gentoopm.pkgcorepm.atom import PkgCoreAtom
class PkgCoreBaseDep(PMBaseDep):
@@ -22,6 +22,8 @@ class PkgCoreBaseDep(PMBaseDep):
yield PkgCoreAtom(d)
elif isinstance(d, OrRestriction):
yield PkgCoreOneOfDep(d, self._pkg)
+ elif isinstance(d, AndRestriction):
+ yield PkgCoreAllOfDep(d, self._pkg)
elif isinstance(d, Conditional) and d.attr == 'use':
yield PkgCoreConditionalUseDep(d, self._pkg)
else:
@@ -31,6 +33,9 @@ class PkgCoreBaseDep(PMBaseDep):
class PkgCoreOneOfDep(PMOneOfDep, PkgCoreBaseDep):
pass
+class PkgCoreAllOfDep(PMAllOfDep, PkgCoreBaseDep):
+ pass
+
class PkgCoreConditionalUseDep(PMConditionalDep, PkgCoreBaseDep):
@property
def enabled(self):
@@ -56,6 +61,8 @@ class PkgCoreUncondDep(PkgCoreBaseDep):
yield PkgCoreAtom(d)
elif isinstance(d, OrRestriction):
yield PkgCoreUncondOneOfDep(d)
+ elif isinstance(d, AndRestriction):
+ yield PkgCoreUncondAllOfDep(d, self._pkg)
else:
raise NotImplementedError('Parsing %s not implemented' \
% repr(d))
@@ -63,5 +70,8 @@ class PkgCoreUncondDep(PkgCoreBaseDep):
class PkgCoreUncondOneOfDep(PMOneOfDep, PkgCoreUncondDep):
pass
+class PkgCoreUncondAllOfDep(PMAllOfDep, PkgCoreUncondDep):
+ pass
+
class PkgCoreUncondPackageDepSet(PkgCoreUncondDep):
pass
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-07-26 16:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-26 7:24 [gentoo-commits] proj/gentoopm:master commit in: gentoopm/pkgcorepm/, gentoopm/paludispm/, gentoopm/basepm/ Michał Górny
-- strict thread matches above, loose matches on Subject: below --
2011-07-26 16:36 Michał Górny
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox