public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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