public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoopm:master commit in: gentoopm/paludispm/, gentoopm/basepm/
Date: Mon, 25 Jul 2011 19:06:36 +0000 (UTC)	[thread overview]
Message-ID: <0ec9072da7ca19f8028d4b602f3bc2f331372f67.mgorny@gentoo> (raw)

commit:     0ec9072da7ca19f8028d4b602f3bc2f331372f67
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 25 18:24:53 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Jul 25 18:24:53 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=0ec9072d

Paludis: support getting depsets.

---
 gentoopm/basepm/depend.py    |   40 ++++++++++++++++++++++++++++++++++++++
 gentoopm/basepm/pkg.py       |   27 +++++++++++++++++++++++++
 gentoopm/paludispm/depend.py |   44 ++++++++++++++++++++++++++++++++++++++++++
 gentoopm/paludispm/pkg.py    |   19 ++++++++++++++++++
 4 files changed, 130 insertions(+), 0 deletions(-)

diff --git a/gentoopm/basepm/depend.py b/gentoopm/basepm/depend.py
new file mode 100644
index 0000000..f1245c1
--- /dev/null
+++ b/gentoopm/basepm/depend.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+#	vim:fileencoding=utf-8
+# (c) 2011 Michał Górny <mgorny@gentoo.org>
+# Released under the terms of the 2-clause BSD license.
+
+from abc import abstractmethod, abstractproperty
+
+from gentoopm.util import ABCObject
+
+class PMPackageDepSet(ABCObject):
+	"""
+	A base class representing a depset of a single package.
+	"""
+
+	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).
+
+		@type: L{PMPackageFinalDepSet}
+		"""
+		pass
+
+class PMPackageFinalDepSet(ABCObject):
+	"""
+	A base class representing a collapsed depset.
+	"""
+
+	@abstractmethod
+	def __iter__(self):
+		"""
+		Iterate over dependency atoms.
+
+		@rtype: iter(L{PMAtom})
+		"""
+		pass

diff --git a/gentoopm/basepm/pkg.py b/gentoopm/basepm/pkg.py
index ec89179..d4f421f 100644
--- a/gentoopm/basepm/pkg.py
+++ b/gentoopm/basepm/pkg.py
@@ -213,6 +213,33 @@ class PMPackage(PMAtom, FillMissingComparisons):
 			return None
 		return PMPackageEnvironment(p)
 
+	@property
+	def build_dependencies(self):
+		"""
+		Get the package build dependencies (C{DEPEND}).
+
+		@type: L{PMPackageDepSet}
+		"""
+		pass
+
+	@property
+	def run_dependencies(self):
+		"""
+		Get the package runtime dependencies (C{RDEPEND}).
+
+		@type: L{PMPackageDepSet}
+		"""
+		pass
+
+	@property
+	def post_dependencies(self):
+		"""
+		Get the package post-installed dependencies (C{PDEPEND}).
+
+		@type: L{PMPackageDepSet}
+		"""
+		pass
+
 	@abstractproperty
 	def slotted(self):
 		"""

diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py
new file mode 100644
index 0000000..2c564a5
--- /dev/null
+++ b/gentoopm/paludispm/depend.py
@@ -0,0 +1,44 @@
+#!/usr/bin/python
+#	vim:fileencoding=utf-8
+# (c) 2011 Michał Górny <mgorny@gentoo.org>
+# Released under the terms of the 2-clause BSD license.
+
+import paludis
+
+from gentoopm.basepm.depend import PMPackageDepSet, \
+		PMPackageFinalDepSet
+from gentoopm.paludispm.atom import PaludisAtom
+
+class PaludisPackageDepSet(PMPackageDepSet):
+	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:
+			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
+			elif isinstance(d, paludis.ConditionalDepSpec):
+				if d.condition_met(self._pkg._env, self._pkg._pkg):
+					for a in self._ideps(d):
+						yield a
+			else:
+				raise NotImplementedError('Unable to parse %s' % repr(d))
+
+	def __iter__(self):
+		for r in self._ideps(self._deps):
+			yield r

diff --git a/gentoopm/paludispm/pkg.py b/gentoopm/paludispm/pkg.py
index 97d64cd..08398ae 100644
--- a/gentoopm/paludispm/pkg.py
+++ b/gentoopm/paludispm/pkg.py
@@ -12,6 +12,7 @@ from gentoopm.basepm.pkg import PMPackage, PMPackageDescription, \
 from gentoopm.paludispm.atom import PaludisAtom, \
 		PaludisPackageKey, PaludisPackageVersion
 from gentoopm.paludispm.contents import PaludisPackageContents
+from gentoopm.paludispm.depend import PaludisPackageDepSet
 from gentoopm.util import SpaceSepTuple
 
 class PaludisBoundPackageKey(PaludisPackageKey, PMBoundPackageKey):
@@ -95,6 +96,24 @@ class PaludisID(PMPackage, PaludisAtom):
 		return str(self._pkg.repository_name)
 
 	@property
+	def build_dependencies(self):
+		return PaludisPackageDepSet(
+				self._pkg.build_dependencies_key().parse_value(),
+				self)
+
+	@property
+	def run_dependencies(self):
+		return PaludisPackageDepSet(
+				self._pkg.run_dependencies_key().parse_value(),
+				self)
+
+	@property
+	def post_dependencies(self):
+		return PaludisPackageDepSet(
+				self._pkg.post_dependencies_key().parse_value(),
+				self)
+
+	@property
 	def _atom(self):
 		return self._pkg.uniquely_identifying_spec()
 



             reply	other threads:[~2011-07-25 20:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-25 19:06 Michał Górny [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-07-29 19:47 [gentoo-commits] proj/gentoopm:master commit in: gentoopm/paludispm/, gentoopm/basepm/ Michał Górny
2011-07-23  9:27 Michał Górny
2011-07-16  8:34 Michał Górny

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0ec9072da7ca19f8028d4b602f3bc2f331372f67.mgorny@gentoo \
    --to=mgorny@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox