public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-06 16:03 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-06 16:03 UTC (permalink / raw
  To: gentoo-commits

commit:     1289b60a321e7b0fa507ee22e9a92d4baef2234c
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jul  6 15:59:59 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jul  6 15:59:59 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=1289b60a

Portage: cleanup class inheritance.

---
 gentoopm/portagepm/__init__.py |    3 +-
 gentoopm/portagepm/db.py       |   65 ----------------------------------------
 gentoopm/portagepm/pkg.py      |   36 ++++++++++++++++++----
 gentoopm/portagepm/repo.py     |   15 ++++++++-
 4 files changed, 43 insertions(+), 76 deletions(-)

diff --git a/gentoopm/portagepm/__init__.py b/gentoopm/portagepm/__init__.py
index 15a9bec..0919916 100644
--- a/gentoopm/portagepm/__init__.py
+++ b/gentoopm/portagepm/__init__.py
@@ -7,8 +7,7 @@ import os
 from portage import create_trees
 
 from gentoopm.basepm import PackageManager
-from gentoopm.portagepm.repo import PortageRepoDict
-from gentoopm.portagepm.db import VDBRepository
+from gentoopm.portagepm.repo import PortageRepoDict, VDBRepository
 
 class PortagePM(PackageManager):
 	name = 'portage'

diff --git a/gentoopm/portagepm/db.py b/gentoopm/portagepm/db.py
deleted file mode 100644
index 3eae39a..0000000
--- a/gentoopm/portagepm/db.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/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 portage.versions
-
-from gentoopm.basepm.metadata import PMPackageMetadata
-from gentoopm.basepm.repo import PMRepository
-from gentoopm.portagepm.pkg import PortageCPV
-
-# XXX: cleanup all this mess!
-
-class PortageDBCPV(PortageCPV):
-	def __init__(self, cpv, dbapi):
-		self._cpv = cpv
-		self._dbapi = dbapi
-
-	@property
-	def metadata(self):
-		return PortageDBMetadata(self._cpv, self._dbapi)
-
-	@property
-	def path(self):
-		# .findname() gives .ebuild path
-		return self._dbapi.getpath(self._cpv)
-
-class PortageDBMetadata(PMPackageMetadata):
-	def __init__(self, cpv, dbapi):
-		self._cpv = cpv
-		self._dbapi = dbapi
-
-	def __getattr__(self, key):
-		return self._dbapi.aux_get(self._cpv, [key])[0]
-
-	@property
-	def CATEGORY(self):
-		return portage.versions.catsplit(self._cpv)[0]
-
-	@property
-	def PN(self):
-		return portage.versions.catpkgsplit(self._cpv)[1]
-
-	@property
-	def PV(self):
-		return portage.versions.pkgsplit(self._cpv)[1]
-
-	@property
-	def PR(self):
-		return portage.versions.pkgsplit(self._cpv)[2]
-
-	@property
-	def PVR(self):
-		return portage.versions.cpv_getversion(self._cpv)
-
-class PortDBRepository(PMRepository):
-	def __init__(self, dbapi):
-		self._dbapi = dbapi
-
-	def __iter__(self):
-		for p in self._dbapi.cpv_all(): # XXX
-			yield PortageDBCPV(p, self._dbapi)
-
-class VDBRepository(PortDBRepository):
-	pass

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 8696706..a92af4e 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -10,10 +10,23 @@ from gentoopm.basepm.pkg import PMPackage
 
 # XXX: cleanup all this mess!
 
-class PortageCPV(PMPackage):
-	def __init__(self, cpv, dbapi, tree):
+class PortageDBCPV(PMPackage):
+	def __init__(self, cpv, dbapi):
 		self._cpv = cpv
 		self._dbapi = dbapi
+
+	@property
+	def metadata(self):
+		return PortageDBMetadata(self._cpv, self._dbapi)
+
+	@property
+	def path(self):
+		# .findname() gives .ebuild path
+		return self._dbapi.getpath(self._cpv)
+
+class PortageCPV(PortageDBCPV):
+	def __init__(self, cpv, dbapi, tree = None):
+		PortageDBCPV.__init__(self, cpv, dbapi)
 		self._tree = tree
 
 	@property
@@ -35,17 +48,15 @@ class PortageCPV(PMPackage):
 				portage.versions.cpv_getversion(self._cpv),
 				portage.versions.cpv_getversion(other._cpv))
 
-class PortageMetadata(PMPackageMetadata):
-	def __init__(self, cpv, dbapi, tree):
+class PortageDBMetadata(PMPackageMetadata):
+	def __init__(self, cpv, dbapi):
 		self._cpv = cpv
 		self._dbapi = dbapi
-		self._tree = tree
 
 	def __getattr__(self, key):
 		if key not in self:
 			raise AttributeError('Unsupported metadata key: %s' % key)
-		return self._dbapi.aux_get(self._cpv, [key],
-				mytree = self._tree)[0]
+		return self._dbapi.aux_get(self._cpv, [key])[0]
 
 	@property
 	def CATEGORY(self):
@@ -66,3 +77,14 @@ class PortageMetadata(PMPackageMetadata):
 	@property
 	def PVR(self):
 		return portage.versions.cpv_getversion(self._cpv)
+
+class PortageMetadata(PortageDBMetadata):
+	def __init__(self, cpv, dbapi, tree):
+		PortageDBMetadata.__init__(self, cpv, dbapi)
+		self._tree = tree
+
+	def __getattr__(self, key):
+		if key not in self:
+			raise AttributeError('Unsupported metadata key: %s' % key)
+		return self._dbapi.aux_get(self._cpv, [key],
+				mytree = self._tree)[0]

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index 8203f92..aece5f6 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -5,8 +5,8 @@
 
 import os.path
 
-from gentoopm.basepm.repo import PMRepositoryDict, PMEbuildRepository
-from gentoopm.portagepm.db import PortDBRepository
+from gentoopm.basepm.repo import PMRepositoryDict, PMEbuildRepository, \
+		PMRepository
 from gentoopm.portagepm.pkg import PortageCPV
 
 class PortageRepoDict(PMRepositoryDict):
@@ -29,6 +29,14 @@ class PortageRepoDict(PMRepositoryDict):
 	def __init__(self, portdbapi):
 		self._dbapi = portdbapi
 
+class PortDBRepository(PMRepository):
+	def __init__(self, dbapi):
+		self._dbapi = dbapi
+
+	def __iter__(self):
+		for p in self._dbapi.cpv_all(): # XXX
+			yield PortageCPV(p, self._dbapi)
+
 class PortageRepository(PortDBRepository, PMEbuildRepository):
 	def __init__(self, repo_obj, portdbapi):
 		self._repo = repo_obj
@@ -50,3 +58,6 @@ class PortageRepository(PortDBRepository, PMEbuildRepository):
 
 	def __cmp__(self, other):
 		return cmp(self._repo.priority, other._repo.priority)
+
+class VDBRepository(PortDBRepository):
+	pass



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-06 20:54 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-06 20:54 UTC (permalink / raw
  To: gentoo-commits

commit:     12de332e8e4c16255a8353fce52e58a309c9847e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jul  6 18:15:47 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jul  6 18:15:47 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=12de332e

portage: reimplement complete package sorting.

---
 gentoopm/portagepm/pkg.py  |   27 ++++++++++++---------------
 gentoopm/portagepm/repo.py |    3 ++-
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index a92af4e..e5e9469 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -3,13 +3,12 @@
 # (c) 2011 Michał Górny <mgorny@gentoo.org>
 # Released under the terms of the 2-clause BSD license.
 
-import portage.versions
+from portage.versions import cpv_getkey, cpv_getversion, vercmp, \
+		catsplit, catpkgsplit, pkgsplit
 
 from gentoopm.basepm.metadata import PMPackageMetadata
 from gentoopm.basepm.pkg import PMPackage
 
-# XXX: cleanup all this mess!
-
 class PortageDBCPV(PMPackage):
 	def __init__(self, cpv, dbapi):
 		self._cpv = cpv
@@ -25,9 +24,10 @@ class PortageDBCPV(PMPackage):
 		return self._dbapi.getpath(self._cpv)
 
 class PortageCPV(PortageDBCPV):
-	def __init__(self, cpv, dbapi, tree = None):
+	def __init__(self, cpv, dbapi, tree, repo_prio):
 		PortageDBCPV.__init__(self, cpv, dbapi)
 		self._tree = tree
+		self._repo_prio = repo_prio
 
 	@property
 	def metadata(self):
@@ -41,12 +41,9 @@ class PortageCPV(PortageDBCPV):
 		if not isinstance(other, PortageCPV):
 			raise TypeError('Unable to compare %s against %s' % \
 					self, other)
-		if portage.versions.cpv_getkey(self._cpv) != \
-				portage.versions.cpv_getkey(other._cpv):
-			raise TypeError('Unable to compare CPVs with different PNs')
-		return portage.versions.vercmp(
-				portage.versions.cpv_getversion(self._cpv),
-				portage.versions.cpv_getversion(other._cpv))
+		return cmp(cpv_getkey(self._cpv), cpv_getkey(other._cpv)) \
+				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv)) \
+				or cmp(self._repo_prio, other._repo_prio)
 
 class PortageDBMetadata(PMPackageMetadata):
 	def __init__(self, cpv, dbapi):
@@ -60,23 +57,23 @@ class PortageDBMetadata(PMPackageMetadata):
 
 	@property
 	def CATEGORY(self):
-		return portage.versions.catsplit(self._cpv)[0]
+		return catsplit(self._cpv)[0]
 
 	@property
 	def PN(self):
-		return portage.versions.catpkgsplit(self._cpv)[1]
+		return catpkgsplit(self._cpv)[1]
 
 	@property
 	def PV(self):
-		return portage.versions.pkgsplit(self._cpv)[1]
+		return pkgsplit(self._cpv)[1]
 
 	@property
 	def PR(self):
-		return portage.versions.pkgsplit(self._cpv)[2]
+		return pkgsplit(self._cpv)[2]
 
 	@property
 	def PVR(self):
-		return portage.versions.cpv_getversion(self._cpv)
+		return cpv_getversion(self._cpv)
 
 class PortageMetadata(PortageDBMetadata):
 	def __init__(self, cpv, dbapi, tree):

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index aece5f6..7f4590d 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -44,9 +44,10 @@ class PortageRepository(PortDBRepository, PMEbuildRepository):
 
 	def __iter__(self):
 		path = self.path
+		prio = self._repo.priority
 		for cp in self._dbapi.cp_all(trees = (path,)):
 			for p in self._dbapi.cp_list(cp, mytree = path):
-				yield PortageCPV(p, self._dbapi, path)
+				yield PortageCPV(p, self._dbapi, path, prio)
 
 	@property
 	def name(self):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-07  9:51 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-07  9:51 UTC (permalink / raw
  To: gentoo-commits

commit:     efa68f8b8245672705833df3f9255831b066d65b
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul  7 09:52:02 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul  7 09:52:02 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=efa68f8b

Fix portage dbapi interface.

---
 gentoopm/portagepm/pkg.py  |    8 ++++----
 gentoopm/portagepm/repo.py |    4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 0163bee..ca2c054 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -24,6 +24,10 @@ class PortageDBCPV(PMPackage):
 		return self._dbapi.getpath(self._cpv)
 
 	@property
+	def key(self):
+		return cpv_getkey(self._cpv)
+
+	@property
 	def id(self):
 		return self._cpv
 
@@ -42,10 +46,6 @@ class PortageCPV(PortageDBCPV):
 		return self._dbapi.findname(self._cpv, self._tree)
 
 	@property
-	def key(self):
-		return cpv_getkey(self._cpv)
-
-	@property
 	def id(self):
 		return '%s::%s' % (self._cpv, self._dbapi.getRepositoryName(self._tree))
 

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index 7f4590d..e1f6cd9 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -7,7 +7,7 @@ import os.path
 
 from gentoopm.basepm.repo import PMRepositoryDict, PMEbuildRepository, \
 		PMRepository
-from gentoopm.portagepm.pkg import PortageCPV
+from gentoopm.portagepm.pkg import PortageCPV, PortageDBCPV
 
 class PortageRepoDict(PMRepositoryDict):
 	def __iter__(self):
@@ -35,7 +35,7 @@ class PortDBRepository(PMRepository):
 
 	def __iter__(self):
 		for p in self._dbapi.cpv_all(): # XXX
-			yield PortageCPV(p, self._dbapi)
+			yield PortageDBCPV(p, self._dbapi)
 
 class PortageRepository(PortDBRepository, PMEbuildRepository):
 	def __init__(self, repo_obj, portdbapi):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-08  7:18 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-08  7:18 UTC (permalink / raw
  To: gentoo-commits

commit:     437025a128f7b79e4fa2e1ef4cf4991dcc4ceb7b
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Jul  8 06:48:53 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Jul  8 06:48:53 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=437025a1

Portage: use unevaluated atoms.

Instead of expanding atoms to categories, just don't match on category.

---
 gentoopm/portagepm/atom.py |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/gentoopm/portagepm/atom.py b/gentoopm/portagepm/atom.py
index 5c5ca69..ccd272f 100644
--- a/gentoopm/portagepm/atom.py
+++ b/gentoopm/portagepm/atom.py
@@ -10,18 +10,20 @@ from portage.versions import catsplit
 
 from gentoopm.basepm.atom import PMAtom
 
-class PortageAtom(PMAtom):
-	def __init__(self, s, pm):
+class PortageAtom(object):
+	def __new__(self, s, pm):
 		try:
-			a = dep_expand(s, mydb = pm._portdb,
-					settings = pm._portdb.settings)
-		except pe.AmbiguousPackageName:
-			raise KeyError('Ambiguous atom: %s' % s)
+			a = dep_expand(s, settings = pm._portdb.settings)
 		except pe.InvalidAtom:
 			raise ValueError('Incorrect atom: %s' % s)
 
 		if catsplit(a.cp)[0] == 'null':
-			raise KeyError('Unable to expand atom: %s' % s)
+			return UnexpandedPortageAtom(a)
+		else:
+			return CompletePortageAtom(a)
+
+class CompletePortageAtom(PMAtom):
+	def __init__(self, a):
 		self._atom = a
 
 	def __contains__(self, pkg):
@@ -30,3 +32,21 @@ class PortageAtom(PMAtom):
 			return False
 		return not self._atom.slot \
 				or self._atom.slot == pkg.metadata.SLOT
+
+class UncategorisedPackageWrapper(object):
+	def __init__(self, pkg):
+		self._pkg = pkg
+
+	@property
+	def id(self):
+		cpv = self._pkg.id
+		return 'null/%s' % catsplit(cpv)[1]
+				
+class UnexpandedPortageAtom(CompletePortageAtom):
+	"""
+	An atom without a category specified.
+	"""
+
+	def __contains__(self, pkg):
+		return CompletePortageAtom.__contains__(self,
+				UncategorisedPackageWrapper(pkg))



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-10 22:17 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-10 22:17 UTC (permalink / raw
  To: gentoo-commits

commit:     f0aa995bc1ce334da4ec5674ea947ceb87d378dd
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 10 21:50:57 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Jul 10 21:50:57 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=f0aa995b

Portage: support overriding PMPackageSet.

---
 gentoopm/portagepm/pkg.py  |   10 +++++++++-
 gentoopm/portagepm/repo.py |    4 ++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index d2ea1ad..938d4a9 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -7,7 +7,15 @@ from portage.versions import cpv_getkey, cpv_getversion, vercmp, \
 		catsplit, catpkgsplit, pkgsplit
 
 from gentoopm.basepm.metadata import PMPackageMetadata
-from gentoopm.basepm.pkg import PMPackage
+from gentoopm.basepm.pkg import PMPackage, PMPackageSet, \
+		PMFilteredPackageSet
+
+class PortagePackageSet(PMPackageSet):
+	def filter(self, *args, **kwargs):
+		return PortageFilteredPackageSet(self, args, kwargs)
+
+class PortageFilteredPackageSet(PortagePackageSet, PMFilteredPackageSet):
+	pass
 
 class PortageDBCPV(PMPackage):
 	def __init__(self, cpv, dbapi):

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index e1f6cd9..87d8edc 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -7,7 +7,7 @@ import os.path
 
 from gentoopm.basepm.repo import PMRepositoryDict, PMEbuildRepository, \
 		PMRepository
-from gentoopm.portagepm.pkg import PortageCPV, PortageDBCPV
+from gentoopm.portagepm.pkg import PortageCPV, PortageDBCPV, PortagePackageSet
 
 class PortageRepoDict(PMRepositoryDict):
 	def __iter__(self):
@@ -29,7 +29,7 @@ class PortageRepoDict(PMRepositoryDict):
 	def __init__(self, portdbapi):
 		self._dbapi = portdbapi
 
-class PortDBRepository(PMRepository):
+class PortDBRepository(PortagePackageSet, PMRepository):
 	def __init__(self, dbapi):
 		self._dbapi = dbapi
 



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-10 22:17 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-10 22:17 UTC (permalink / raw
  To: gentoo-commits

commit:     3e8b0067791e55c4a28c6a0a275e55f0eb7d21a9
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 10 21:53:44 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Jul 10 22:16:51 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=3e8b0067

Portage: Pass FakeSettings to instantiate atoms without dbapi.

---
 gentoopm/portagepm/__init__.py |    2 +-
 gentoopm/portagepm/atom.py     |   14 ++++++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/gentoopm/portagepm/__init__.py b/gentoopm/portagepm/__init__.py
index 4b1887a..6bade14 100644
--- a/gentoopm/portagepm/__init__.py
+++ b/gentoopm/portagepm/__init__.py
@@ -32,4 +32,4 @@ class PortagePM(PackageManager):
 
 	@property
 	def Atom(self):
-		return functools.partial(PortageAtom, pm = self)
+		return PortageAtom

diff --git a/gentoopm/portagepm/atom.py b/gentoopm/portagepm/atom.py
index 121e3b1..7614298 100644
--- a/gentoopm/portagepm/atom.py
+++ b/gentoopm/portagepm/atom.py
@@ -3,6 +3,8 @@
 # (c) 2011 Michał Górny <mgorny@gentoo.org>
 # Released under the terms of the 2-clause BSD license.
 
+import collections
+
 import portage.exception as pe
 from portage.dbapi.dep_expand import dep_expand
 from portage.dep import match_from_list
@@ -11,10 +13,18 @@ from portage.versions import catsplit
 from gentoopm.basepm.atom import PMAtom
 from gentoopm.exceptions import InvalidAtomStringError
 
+class FakeSettings(object):
+	"""
+	Fake settings object, to satisfy cpv_expand().
+	"""
+
+	def __getattr__(self, key):
+		return lambda: collections.defaultdict(lambda: '')
+
 class PortageAtom(object):
-	def __new__(self, s, pm):
+	def __new__(self, s):
 		try:
-			a = dep_expand(s, settings = pm._portdb.settings)
+			a = dep_expand(s, settings = FakeSettings())
 		except pe.InvalidAtom:
 			raise InvalidAtomStringError('Incorrect atom: %s' % s)
 



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-10 22:17 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-10 22:17 UTC (permalink / raw
  To: gentoo-commits

commit:     437218ffb7a8315e13f322305504f3bfdc1c7a06
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 10 22:05:12 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Jul 10 22:17:02 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=437218ff

Portage: support transforming filter strings to atoms.

---
 gentoopm/portagepm/pkg.py |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 938d4a9..406ded4 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -9,10 +9,14 @@ from portage.versions import cpv_getkey, cpv_getversion, vercmp, \
 from gentoopm.basepm.metadata import PMPackageMetadata
 from gentoopm.basepm.pkg import PMPackage, PMPackageSet, \
 		PMFilteredPackageSet
+from gentoopm.portagepm.atom import PortageAtom
 
 class PortagePackageSet(PMPackageSet):
 	def filter(self, *args, **kwargs):
-		return PortageFilteredPackageSet(self, args, kwargs)
+		newargs = [(a if not isinstance(a, basestring)
+			else PortageAtom(a)) for a in args]
+
+		return PortageFilteredPackageSet(self, newargs, kwargs)
 
 class PortageFilteredPackageSet(PortagePackageSet, PMFilteredPackageSet):
 	pass



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-14 13:31 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-14 13:31 UTC (permalink / raw
  To: gentoo-commits

commit:     f11045c9630fe5519a414c13268646abaf03dc62
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 14 12:43:59 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 12:43:59 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=f11045c9

Portage: disallow incomplete yet associated atoms.

---
 gentoopm/portagepm/atom.py |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/atom.py b/gentoopm/portagepm/atom.py
index fbd42d3..e98de4d 100644
--- a/gentoopm/portagepm/atom.py
+++ b/gentoopm/portagepm/atom.py
@@ -29,7 +29,8 @@ class PortageAtom(object):
 			raise InvalidAtomStringError('Incorrect atom: %s' % s)
 
 		if catsplit(a.cp)[0] == 'null':
-			return UnexpandedPortageAtom(a, pkg)
+			assert(pkg is None)
+			return UnexpandedPortageAtom(a)
 		else:
 			return CompletePortageAtom(a, pkg)
 



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-14 14:05 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-14 14:05 UTC (permalink / raw
  To: gentoo-commits

commit:     a561d3cff13fb1ee090fc57c5c7db131b203274d
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 14 13:58:08 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 13:59:08 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=a561d3cf

Portage: fix getting package atom.

---
 gentoopm/portagepm/atom.py |    2 +-
 gentoopm/portagepm/pkg.py  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gentoopm/portagepm/atom.py b/gentoopm/portagepm/atom.py
index 6e28d3c..f68d136 100644
--- a/gentoopm/portagepm/atom.py
+++ b/gentoopm/portagepm/atom.py
@@ -35,7 +35,7 @@ class PortageAtom(object):
 			return CompletePortageAtom(a, pkg)
 
 class CompletePortageAtom(PMAtom):
-	def __init__(self, a, pkg):
+	def __init__(self, a, pkg = None):
 		self._atom = a
 		self._pkg = pkg
 

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index ff80ae5..c7212f9 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -45,7 +45,7 @@ class PortageDBCPV(PMPackage):
 
 	@property
 	def atom(self):
-		return PkgCoreAtom('=%s' % self.id, self)
+		return PortageAtom('=%s' % self.id, self)
 
 class PortageCPV(PortageDBCPV):
 	def __init__(self, cpv, dbapi, tree, repo_prio):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-15  8:39 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-15  8:39 UTC (permalink / raw
  To: gentoo-commits

commit:     d96f83f3a431c47a8c025e8978d07b5970ecf0ee
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 15 07:11:20 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Jul 15 08:37:33 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=d96f83f3

Portage: use match() / xmatch() for faster Atom matching.

---
 gentoopm/portagepm/repo.py |  112 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 111 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index 87d8edc..c8e55f5 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -5,9 +5,14 @@
 
 import os.path
 
+import portage.exception as pe
+from portage.versions import catsplit
+
 from gentoopm.basepm.repo import PMRepositoryDict, PMEbuildRepository, \
 		PMRepository
-from gentoopm.portagepm.pkg import PortageCPV, PortageDBCPV, PortagePackageSet
+from gentoopm.portagepm.atom import PortageAtom, CompletePortageAtom
+from gentoopm.portagepm.pkg import PortageCPV, PortageDBCPV, PortagePackageSet, \
+		PortageFilteredPackageSet
 
 class PortageRepoDict(PMRepositoryDict):
 	def __iter__(self):
@@ -29,6 +34,38 @@ class PortageRepoDict(PMRepositoryDict):
 	def __init__(self, portdbapi):
 		self._dbapi = portdbapi
 
+class PortageFilteredDBRepo(PortageFilteredPackageSet):
+	def __init__(self, repo, atom):
+		self._dbapi = repo._dbapi
+		self._atom = atom._atom
+
+	@property
+	def _stringified_atom(self):
+		a = str(self._atom)
+		return a.replace('null/', '')
+
+	def __iter__(self):
+		a = self._stringified_atom
+		try:
+			it = self._dbapi.match(a)
+		except pe.AmbiguousPackageName as e:
+			for pkgcand in e.args[0]:
+				for p in PortageHackedFilteredDBRepo(self, pkgcand):
+					yield p
+		else:
+			for p in it:
+				yield PortageDBCPV(p, self._dbapi)
+
+class PortageHackedFilteredDBRepo(PortageFilteredDBRepo):
+	def __init__(self, repo, pkgcand):
+		cat = catsplit(pkgcand)[0]
+		self._atom = str(repo._atom).replace('null/', '%s/' % cat)
+		self._dbapi = repo._dbapi
+
+	@property
+	def _stringified_atom(self):
+		return self._atom
+
 class PortDBRepository(PortagePackageSet, PMRepository):
 	def __init__(self, dbapi):
 		self._dbapi = dbapi
@@ -37,6 +74,77 @@ class PortDBRepository(PortagePackageSet, PMRepository):
 		for p in self._dbapi.cpv_all(): # XXX
 			yield PortageDBCPV(p, self._dbapi)
 
+	_filtered_subclass = PortageFilteredDBRepo
+	def filter(self, *args, **kwargs):
+		newargs = []
+		filt = None
+		for a in args:
+			if isinstance(a, basestring):
+				a = PortageAtom(a)
+			if isinstance(a, CompletePortageAtom) and filt is None:
+				filt = a
+			else:
+				newargs.append(a)
+
+		pset = self
+		if filt:
+			pset = self._filtered_subclass(pset, filt)
+		if newargs or kwargs:
+			pset = PortageFilteredPackageSet(pset, newargs, kwargs)
+		return pset
+
+class PortageFilteredRepo(PortageFilteredDBRepo):
+	def __init__(self, repo, atom):
+		PortageFilteredDBRepo.__init__(self, repo, atom)
+		self._name = repo.name
+		self._path = repo.path
+		self._prio = repo._repo.priority
+
+	def __iter__(self):
+		if self._atom.repo is not None:
+			if self._atom.repo != self._name:
+				return
+			a = self._stringified_atom
+		else:
+			a = '%s::%s' % (self._stringified_atom, self._name)
+
+		try:
+			it = self._dbapi.xmatch("match-all", a)
+		except pe.AmbiguousPackageName as e:
+			for pkgcand in e.args[0]:
+				for p in PortageHackedFilteredRepo(self, pkgcand):
+					yield p
+		else:
+			for p in it:
+				yield PortageCPV(p, self._dbapi, self._path, self._prio)
+
+class PortageHackedAtom(object):
+	def __init__(self, s, repo):
+		self._s = s
+		self._repo = repo
+
+	@property
+	def repo(self):
+		return self._repo
+
+	def __str__(self):
+		return self._s
+
+class PortageHackedFilteredRepo(PortageFilteredRepo):
+	def __init__(self, repo, pkgcand):
+		cat = catsplit(pkgcand)[0]
+		self._atom = PortageHackedAtom(
+				str(repo._atom).replace('null/', '%s/' % cat),
+				repo._atom.repo)
+		self._dbapi = repo._dbapi
+		self._path = repo._path
+		self._prio = repo._prio
+		self._name = repo._name
+
+	@property
+	def _stringified_atom(self):
+		return str(self._atom)
+
 class PortageRepository(PortDBRepository, PMEbuildRepository):
 	def __init__(self, repo_obj, portdbapi):
 		self._repo = repo_obj
@@ -49,6 +157,8 @@ class PortageRepository(PortDBRepository, PMEbuildRepository):
 			for p in self._dbapi.cp_list(cp, mytree = path):
 				yield PortageCPV(p, self._dbapi, path, prio)
 
+	_filtered_subclass = PortageFilteredRepo
+
 	@property
 	def name(self):
 		return self._repo.name



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-15 12:34 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-15 12:34 UTC (permalink / raw
  To: gentoo-commits

commit:     5926e3961f86e2047749579e2db8522ba3b94d11
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 15 11:21:30 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Jul 15 11:21:30 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=5926e396

Portage: support atom comparison in vardb.

---
 gentoopm/portagepm/pkg.py |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index b4ae7a6..67f4c55 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -47,6 +47,13 @@ class PortageDBCPV(PMPackage):
 	def atom(self):
 		return PortageAtom('=%s' % self.id, self)
 
+	def __cmp__(self, other):
+		if not isinstance(other, PortageDBCPV):
+			raise TypeError('Unable to compare %s against %s' % \
+					(self, other))
+		return cmp(cpv_getkey(self._cpv), cpv_getkey(other._cpv)) \
+				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv))
+
 class PortageCPV(PortageDBCPV):
 	def __init__(self, cpv, dbapi, tree, repo_prio):
 		PortageDBCPV.__init__(self, cpv, dbapi)



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-15 13:32 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-15 13:32 UTC (permalink / raw
  To: gentoo-commits

commit:     6fe4e2093009d6e50a542fb4b1e6547ddca01bba
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 15 13:18:53 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Jul 15 13:18:53 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=6fe4e209

Portage: use rich comparisons.

---
 gentoopm/portagepm/pkg.py  |   14 +++++++-------
 gentoopm/portagepm/repo.py |    4 ++--
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 67f4c55..90db650 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -47,12 +47,12 @@ class PortageDBCPV(PMPackage):
 	def atom(self):
 		return PortageAtom('=%s' % self.id, self)
 
-	def __cmp__(self, other):
+	def __lt__(self, other):
 		if not isinstance(other, PortageDBCPV):
 			raise TypeError('Unable to compare %s against %s' % \
 					(self, other))
-		return cmp(cpv_getkey(self._cpv), cpv_getkey(other._cpv)) \
-				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv))
+		return cpv_getkey(self._cpv) < cpv_getkey(other._cpv) \
+				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv)) < 0
 
 class PortageCPV(PortageDBCPV):
 	def __init__(self, cpv, dbapi, tree, repo_prio):
@@ -72,13 +72,13 @@ class PortageCPV(PortageDBCPV):
 	def id(self):
 		return '%s::%s' % (self._cpv, self._dbapi.getRepositoryName(self._tree))
 
-	def __cmp__(self, other):
+	def __lt__(self, other):
 		if not isinstance(other, PortageCPV):
 			raise TypeError('Unable to compare %s against %s' % \
 					(self, other))
-		return cmp(cpv_getkey(self._cpv), cpv_getkey(other._cpv)) \
-				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv)) \
-				or cmp(self._repo_prio, other._repo_prio)
+		return cpv_getkey(self._cpv) < cpv_getkey(other._cpv) \
+				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv)) < 0 \
+				or self._repo_prio < other._repo_prio
 
 class PortageDBMetadata(PMPackageMetadata):
 	def __init__(self, cpv, dbapi):

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index d3cd9c6..ecfaf30 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -167,8 +167,8 @@ class PortageRepository(PortDBRepository, PMEbuildRepository):
 	def path(self):
 		return self._repo.location
 
-	def __cmp__(self, other):
-		return cmp(self._repo.priority, other._repo.priority)
+	def __lt__(self, other):
+		return self._repo.priority < other._repo.priority
 
 class VDBRepository(PortDBRepository):
 	pass



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-19 20:53 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-19 20:53 UTC (permalink / raw
  To: gentoo-commits

commit:     37d1d97fa2a85b2901043921e51ee70db19921b3
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 19 20:51:18 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 19 20:51:18 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=37d1d97f

Portage: return tuple in _aux_get() only when necessary.

---
 gentoopm/portagepm/pkg.py |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index e8bf6b5..9f3748e 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -63,7 +63,11 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 		return PortagePackageVersion(self._cpv)
 
 	def _aux_get(self, *keys):
-		return self._dbapi.aux_get(self._cpv, keys)
+		val = self._dbapi.aux_get(self._cpv, keys)
+		if len(keys) == 1:
+			return val[0]
+		else:
+			return tuple(val)
 
 	@property
 	def description(self):
@@ -116,8 +120,12 @@ class PortageCPV(PortageDBCPV):
 		return StringWrapper(self._dbapi.getRepositoryName(self._tree))
 
 	def _aux_get(self, *keys):
-		return self._dbapi.aux_get(self._cpv, keys,
+		val = self._dbapi.aux_get(self._cpv, keys,
 				mytree = self._tree)
+		if len(keys) == 1:
+			return val[0]
+		else:
+			return tuple(val)
 
 	def __str__(self):
 		return '=%s::%s' % (self._cpv, self.repository)
@@ -137,4 +145,4 @@ class PortageMetadata(PMPackageMetadata):
 	def __getattr__(self, key):
 		if key not in self:
 			raise AttributeError('Unsupported metadata key: %s' % key)
-		return self._pkg._aux_get(key)[0]
+		return self._pkg._aux_get(key)



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-19 20:53 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-19 20:53 UTC (permalink / raw
  To: gentoo-commits

commit:     e6df986948b56087b4ab23375079c92796d36dc2
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 19 20:53:06 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 19 20:53:06 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=e6df9869

Portage: use _aux_get(), not metadata in new properties.

---
 gentoopm/portagepm/pkg.py |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 9f3748e..135a271 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -23,12 +23,12 @@ class PortageFilteredPackageSet(PortagePackageSet, PMFilteredPackageSet):
 	pass
 
 class PortagePackageDescription(PMPackageDescription):
-	def __init__(self, meta):
-		self._meta = meta
+	def __init__(self, pkg):
+		self._pkg = pkg
 
 	@property
 	def short(self):
-		return StringWrapper(self._meta['DESCRIPTION'])
+		return StringWrapper(self._pkg._aux_get['DESCRIPTION'])
 
 	@property
 	def long(self):
@@ -71,11 +71,11 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 
 	@property
 	def description(self):
-		return PortagePackageDescription(self.metadata) # XXX
+		return PortagePackageDescription(self)
 
 	@property
 	def slot(self):
-		return StringWrapper(self.metadata['SLOT']) # XXX
+		return StringWrapper(self._aux_get('SLOT'))
 
 	@property
 	def repository(self):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-19 20:53 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-19 20:53 UTC (permalink / raw
  To: gentoo-commits

commit:     6dcdf3633237cd1d98d064a4df0d1fc8e83c5af5
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 19 20:53:23 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 19 20:53:23 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=6dcdf363

Portage: return None as repository for installed pkgs.

---
 gentoopm/portagepm/pkg.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 135a271..e3e9c38 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -79,7 +79,7 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 
 	@property
 	def repository(self):
-		raise NotImplementedError() # XXX
+		raise None
 
 	@property
 	def slotted(self):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-19 20:53 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-19 20:53 UTC (permalink / raw
  To: gentoo-commits

commit:     eb76b8c4e201184e51e4cdf169b971e6cb3ddae4
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 19 20:35:26 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 19 20:35:26 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=eb76b8c4

Portage: move _aux_get() wrapper directly to Portage{,DB}CPV.

---
 gentoopm/portagepm/pkg.py |   33 ++++++++++++---------------------
 1 files changed, 12 insertions(+), 21 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index b421596..e8bf6b5 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -47,7 +47,7 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 
 	@property
 	def metadata(self):
-		return PortageDBMetadata(self._cpv, self._dbapi)
+		return PortageMetadata(self)
 
 	@property
 	def path(self):
@@ -62,6 +62,9 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 	def version(self):
 		return PortagePackageVersion(self._cpv)
 
+	def _aux_get(self, *keys):
+		return self._dbapi.aux_get(self._cpv, keys)
+
 	@property
 	def description(self):
 		return PortagePackageDescription(self.metadata) # XXX
@@ -105,10 +108,6 @@ class PortageCPV(PortageDBCPV):
 		self._repo_prio = repo_prio
 
 	@property
-	def metadata(self):
-		return PortageMetadata(self._cpv, self._dbapi, self._tree)
-
-	@property
 	def path(self):
 		return StringWrapper(self._dbapi.findname(self._cpv, self._tree))
 
@@ -116,6 +115,10 @@ class PortageCPV(PortageDBCPV):
 	def repository(self):
 		return StringWrapper(self._dbapi.getRepositoryName(self._tree))
 
+	def _aux_get(self, *keys):
+		return self._dbapi.aux_get(self._cpv, keys,
+				mytree = self._tree)
+
 	def __str__(self):
 		return '=%s::%s' % (self._cpv, self.repository)
 
@@ -127,23 +130,11 @@ class PortageCPV(PortageDBCPV):
 				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv)) < 0 \
 				or self._repo_prio < other._repo_prio
 
-class PortageDBMetadata(PMPackageMetadata):
-	def __init__(self, cpv, dbapi):
-		self._cpv = cpv
-		self._dbapi = dbapi
-
-	def __getattr__(self, key):
-		if key not in self:
-			raise AttributeError('Unsupported metadata key: %s' % key)
-		return self._dbapi.aux_get(self._cpv, [key])[0]
-
-class PortageMetadata(PortageDBMetadata):
-	def __init__(self, cpv, dbapi, tree):
-		PortageDBMetadata.__init__(self, cpv, dbapi)
-		self._tree = tree
+class PortageMetadata(PMPackageMetadata):
+	def __init__(self, pkg):
+		self._pkg = pkg
 
 	def __getattr__(self, key):
 		if key not in self:
 			raise AttributeError('Unsupported metadata key: %s' % key)
-		return self._dbapi.aux_get(self._cpv, [key],
-				mytree = self._tree)[0]
+		return self._pkg._aux_get(key)[0]



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-20  9:41 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-20  9:41 UTC (permalink / raw
  To: gentoo-commits

commit:     e205838a220bbc41143e4a8c012f0c9b5da9007e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 20 09:21:21 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jul 20 09:21:21 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=e205838a

Portage: fix getting DESCRIPTION.

---
 gentoopm/portagepm/pkg.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 2c40611..88d3104 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -28,7 +28,7 @@ class PortagePackageDescription(PMPackageDescription):
 
 	@property
 	def short(self):
-		return StringWrapper(self._pkg._aux_get['DESCRIPTION'])
+		return StringWrapper(self._pkg._aux_get('DESCRIPTION'))
 
 	@property
 	def long(self):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-21  8:47 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-21  8:47 UTC (permalink / raw
  To: gentoo-commits

commit:     8f5be684faba3da99038b41148a85eaaf81d3f3e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 21 07:21:24 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul 21 07:21:24 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=8f5be684

Portage: don't hardcode CPV classes in repo code.

---
 gentoopm/portagepm/repo.py |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index 19f4e85..b4c3fa6 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -4,6 +4,7 @@
 # Released under the terms of the 2-clause BSD license.
 
 import os.path
+from abc import abstractproperty
 
 import portage.exception as pe
 from portage.versions import catsplit
@@ -38,6 +39,7 @@ class PortageRepoDict(PMRepositoryDict):
 class PortageFilteredDBRepo(PortageFilteredPackageSet):
 	def __init__(self, repo, atom):
 		self._dbapi = repo._dbapi
+		self._pkg_class = repo._pkg_class
 		self._atom = atom._atom
 
 	@property
@@ -55,13 +57,14 @@ class PortageFilteredDBRepo(PortageFilteredPackageSet):
 					yield p
 		else:
 			for p in it:
-				yield PortageDBCPV(p, self._dbapi)
+				yield self._pkg_class(p, self._dbapi)
 
 class PortageHackedFilteredDBRepo(PortageFilteredDBRepo):
 	def __init__(self, repo, pkgcand):
 		cat = catsplit(pkgcand)[0]
 		self._atom = str(repo._atom).replace('null/', '%s/' % cat)
 		self._dbapi = repo._dbapi
+		self._pkg_class = repo._pkg_class
 
 	@property
 	def _stringified_atom(self):
@@ -71,9 +74,13 @@ class PortDBRepository(PortagePackageSet, PMRepository):
 	def __init__(self, dbapi):
 		self._dbapi = dbapi
 
+	@abstractproperty
+	def _pkg_class(self):
+		pass
+
 	def __iter__(self):
 		for p in self._dbapi.cpv_all(): # XXX
-			yield PortageDBCPV(p, self._dbapi)
+			yield self._pkg_class(p, self._dbapi)
 
 	_filtered_subclass = PortageFilteredDBRepo
 	def filter(self, *args, **kwargs):
@@ -117,7 +124,7 @@ class PortageFilteredRepo(PortageFilteredDBRepo):
 					yield p
 		else:
 			for p in it:
-				yield PortageCPV(p, self._dbapi, self._path, self._prio)
+				yield self._pkg_class(p, self._dbapi, self._path, self._prio)
 
 class PortageHackedAtom(object):
 	def __init__(self, s, repo):
@@ -139,6 +146,7 @@ class PortageHackedFilteredRepo(PortageFilteredRepo):
 				repo._atom.repo)
 		self._dbapi = repo._dbapi
 		self._path = repo._path
+		self._pkg_class = repo._pkg_class
 		self._prio = repo._prio
 		self._name = repo._name
 
@@ -153,12 +161,13 @@ class PortageRepository(PortDBRepository, PMEbuildRepository,
 		self._repo = repo_obj
 		PortDBRepository.__init__(self, portdbapi)
 
+	_pkg_class = PortageCPV
 	def __iter__(self):
 		path = self.path
 		prio = self._repo.priority
 		for cp in self._dbapi.cp_all(trees = (path,)):
 			for p in self._dbapi.cp_list(cp, mytree = path):
-				yield PortageCPV(p, self._dbapi, path, prio)
+				yield self._pkg_class(p, self._dbapi, path, prio)
 
 	_filtered_subclass = PortageFilteredRepo
 
@@ -174,4 +183,4 @@ class PortageRepository(PortDBRepository, PMEbuildRepository,
 		return self._repo.priority < other._repo.priority
 
 class VDBRepository(PortDBRepository):
-	pass
+	_pkg_class = PortageDBCPV



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-21  8:47 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-21  8:47 UTC (permalink / raw
  To: gentoo-commits

commit:     38eccacf7cab5507f59ca5347a7d88b5e44fe857
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 21 07:23:45 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul 21 07:23:45 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=38eccacf

Portage: introduce PortageVDBCPV, as a PMInstalledPackage subclass.

---
 gentoopm/portagepm/pkg.py  |    6 +++++-
 gentoopm/portagepm/repo.py |    4 ++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 9874d07..e82b232 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -6,7 +6,8 @@
 from portage.versions import cpv_getkey, cpv_getversion, vercmp
 
 from gentoopm.basepm.metadata import PMPackageMetadata
-from gentoopm.basepm.pkg import PMPackage, PMPackageDescription
+from gentoopm.basepm.pkg import PMPackage, PMPackageDescription, \
+		PMInstalledPackage
 from gentoopm.basepm.pkgset import PMPackageSet, PMFilteredPackageSet
 from gentoopm.portagepm.atom import PortageAtom, CompletePortageAtom, \
 		PortagePackageKey, PortagePackageVersion, _get_atom
@@ -147,6 +148,9 @@ class PortageCPV(PortageDBCPV):
 				or vercmp(cpv_getversion(self._cpv), cpv_getversion(other._cpv)) < 0 \
 				or self._repo_prio < other._repo_prio
 
+class PortageVDBCPV(PortageDBCPV, PMInstalledPackage):
+	pass
+
 class PortageMetadata(PMPackageMetadata):
 	def __init__(self, pkg):
 		self._pkg = pkg

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index b4c3fa6..2486514 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -12,7 +12,7 @@ from portage.versions import catsplit
 from gentoopm.basepm.repo import PMRepositoryDict, PMEbuildRepository, \
 		PMRepository
 from gentoopm.portagepm.atom import PortageAtom, CompletePortageAtom
-from gentoopm.portagepm.pkg import PortageCPV, PortageDBCPV, PortagePackageSet, \
+from gentoopm.portagepm.pkg import PortageCPV, PortageVDBCPV, PortagePackageSet, \
 		PortageFilteredPackageSet
 from gentoopm.util import FillMissingComparisons
 
@@ -183,4 +183,4 @@ class PortageRepository(PortDBRepository, PMEbuildRepository,
 		return self._repo.priority < other._repo.priority
 
 class VDBRepository(PortDBRepository):
-	_pkg_class = PortageDBCPV
+	_pkg_class = PortageVDBCPV



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-25 17:06 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-25 17:06 UTC (permalink / raw
  To: gentoo-commits

commit:     bbe19987fc4d033ed60d0696ec3c88f1d183ca76
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 25 17:03:17 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Jul 25 17:06:58 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=bbe19987

Portage: support getting package contents.

---
 gentoopm/portagepm/contents.py |   15 +++++++++++++++
 gentoopm/portagepm/pkg.py      |    5 ++++-
 2 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/contents.py b/gentoopm/portagepm/contents.py
new file mode 100644
index 0000000..dcdecbe
--- /dev/null
+++ b/gentoopm/portagepm/contents.py
@@ -0,0 +1,15 @@
+#!/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 gentoopm.basepm.contents import PMPackageContents, \
+		PMContentObj
+
+class PortagePackageContents(PMPackageContents):
+	def __init__(self, dblink):
+		self._dblink = dblink
+
+	def __iter__(self):
+		for f, details in self._dblink.getcontents().items():
+			yield PMContentObj(str(f))

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index a26bb45..d2ee87b 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -12,6 +12,7 @@ from gentoopm.basepm.pkg import PMPackage, PMPackageDescription, \
 from gentoopm.basepm.pkgset import PMPackageSet, PMFilteredPackageSet
 from gentoopm.portagepm.atom import PortageAtom, CompletePortageAtom, \
 		PortagePackageKey, PortagePackageVersion, _get_atom
+from gentoopm.portagepm.contents import PortagePackageContents
 from gentoopm.util import SpaceSepTuple
 
 class PortagePackageSet(PMPackageSet):
@@ -159,7 +160,9 @@ class PortageCPV(PortageDBCPV, PMInstallablePackage):
 				or self._repo_prio < other._repo_prio
 
 class PortageVDBCPV(PortageDBCPV, PMInstalledPackage):
-	pass
+	@property
+	def contents(self):
+		return PortagePackageContents(self._dbapi._dblink(self._cpv))
 
 class PortageMetadata(PMPackageMetadata):
 	def __init__(self, pkg):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-26 17:18 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-26 17:18 UTC (permalink / raw
  To: gentoo-commits

commit:     3760928e4d4c083bba6539f628ea37a8d3c99729
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 26 17:19:10 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 26 17:19:10 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=3760928e

Portage: support a subset of dependency parsing.

---
 gentoopm/portagepm/depend.py |   42 ++++++++++++++++++++++++++++++++++++++++++
 gentoopm/portagepm/pkg.py    |   13 +++++++++++++
 2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
new file mode 100644
index 0000000..6c06693
--- /dev/null
+++ b/gentoopm/portagepm/depend.py
@@ -0,0 +1,42 @@
+#!/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 portage.dep import paren_reduce
+
+from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
+	PMOneOfDep, PMAllOfDep, PMBaseDep
+from gentoopm.portagepm.atom import CompletePortageAtom
+
+class PortageBaseDep(PMBaseDep):
+	def __init__(self, deps):
+		self._deps = deps
+
+	def __iter__(self):
+		it = iter(self._deps)
+		for d in it:
+			if d == '||':
+				yield PortageOneOfDep(next(it))
+			elif d == '&&':
+				yield PortageAllOfDep(next(it))
+			elif d.endswith('?'):
+				yield PortageConditionalUseDep(next(it))
+			else:
+				yield CompletePortageAtom(d)
+
+class PortageOneOfDep(PMOneOfDep, PortageBaseDep):
+	pass
+
+class PortageAllOfDep(PMAllOfDep, PortageBaseDep):
+	pass
+
+class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
+	@property
+	def enabled(self):
+		# XXX
+		raise NotImplementedError()
+
+class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
+	def __init__(self, s):
+		self._deps = paren_reduce(s)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index d2ee87b..9922af3 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -13,6 +13,7 @@ from gentoopm.basepm.pkgset import PMPackageSet, PMFilteredPackageSet
 from gentoopm.portagepm.atom import PortageAtom, CompletePortageAtom, \
 		PortagePackageKey, PortagePackageVersion, _get_atom
 from gentoopm.portagepm.contents import PortagePackageContents
+from gentoopm.portagepm.depend import PortagePackageDepSet
 from gentoopm.util import SpaceSepTuple
 
 class PortagePackageSet(PMPackageSet):
@@ -118,6 +119,18 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 	def _atom(self):
 		return _get_atom(str(self))
 
+	@property
+	def build_dependencies(self):
+		return PortagePackageDepSet(self._aux_get('DEPEND'))
+
+	@property
+	def run_dependencies(self):
+		return PortagePackageDepSet(self._aux_get('RDEPEND'))
+
+	@property
+	def post_dependencies(self):
+		return PortagePackageDepSet(self._aux_get('PDEPEND'))
+
 	def __str__(self):
 		return '=%s' % self._cpv
 



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-26 17:30 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-26 17:30 UTC (permalink / raw
  To: gentoo-commits

commit:     24f6819cffef1e48c2da4a8850e1b3944852d6d6
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 26 17:31:01 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul 26 17:31:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=24f6819c

Portage: fix generating dependency atoms.

---
 gentoopm/portagepm/depend.py |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
index 6c06693..ac289d4 100644
--- a/gentoopm/portagepm/depend.py
+++ b/gentoopm/portagepm/depend.py
@@ -7,7 +7,7 @@ from portage.dep import paren_reduce
 
 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
 	PMOneOfDep, PMAllOfDep, PMBaseDep
-from gentoopm.portagepm.atom import CompletePortageAtom
+from gentoopm.portagepm.atom import PortageAtom
 
 class PortageBaseDep(PMBaseDep):
 	def __init__(self, deps):
@@ -23,7 +23,7 @@ class PortageBaseDep(PMBaseDep):
 			elif d.endswith('?'):
 				yield PortageConditionalUseDep(next(it))
 			else:
-				yield CompletePortageAtom(d)
+				yield PortageAtom(d)
 
 class PortageOneOfDep(PMOneOfDep, PortageBaseDep):
 	pass



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-27  8:26 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-27  8:26 UTC (permalink / raw
  To: gentoo-commits

commit:     e91eb978fa051988af4707ff19b263bd2883f02b
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 27 08:27:28 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jul 27 08:27:28 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=e91eb978

Portage: support simple USE collapsing.

---
 gentoopm/portagepm/depend.py |   21 +++++++++++++--------
 gentoopm/portagepm/pkg.py    |   35 ++++++++++++++++++++++++++++++++---
 2 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
index ac289d4..9421099 100644
--- a/gentoopm/portagepm/depend.py
+++ b/gentoopm/portagepm/depend.py
@@ -10,18 +10,20 @@ from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
 from gentoopm.portagepm.atom import PortageAtom
 
 class PortageBaseDep(PMBaseDep):
-	def __init__(self, deps):
+	def __init__(self, deps, puse):
 		self._deps = deps
+		self._puse = puse
 
 	def __iter__(self):
 		it = iter(self._deps)
 		for d in it:
 			if d == '||':
-				yield PortageOneOfDep(next(it))
+				yield PortageOneOfDep(next(it), self._puse)
 			elif d == '&&':
-				yield PortageAllOfDep(next(it))
+				yield PortageAllOfDep(next(it), self._puse)
 			elif d.endswith('?'):
-				yield PortageConditionalUseDep(next(it))
+				yield PortageConditionalUseDep(next(it),
+						self._puse, d.rstrip('?'))
 			else:
 				yield PortageAtom(d)
 
@@ -32,11 +34,14 @@ class PortageAllOfDep(PMAllOfDep, PortageBaseDep):
 	pass
 
 class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
+	def __init__(self, deps, puse, flag):
+		PortageBaseDep.__init__(self, deps, puse)
+		self._flag = flag
+
 	@property
 	def enabled(self):
-		# XXX
-		raise NotImplementedError()
+		return self._flag in self._puse
 
 class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
-	def __init__(self, s):
-		self._deps = paren_reduce(s)
+	def __init__(self, s, puse):
+		PortageBaseDep.__init__(self, paren_reduce(s), puse)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 39e4a59..a85f70d 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -128,16 +128,45 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 		return _get_atom(str(self))
 
 	@property
+	def _applied_use(self):
+		class LazyUseGetter(object):
+			def __init__(self, dbapi, cpv):
+				self._cpv = cpv
+				self._dbapi = dbapi
+				self._settings = dbapi.settings
+				self._use_cache = None
+
+			@property
+			def _use_set(self):
+				if self._use_cache is None:
+					s = self._settings.__class__(clone = self._settings)
+					# XXX: repos? _emerge.Package or compatible API?
+					s.setcpv(self._cpv, mydb = self._dbapi)
+					self._use_cache = frozenset(s['PORTAGE_USE'].split())
+				return self._use_cache
+
+			def __iter__(self):
+				return iter(self._use_set)
+
+			def __contains__(self, k):
+				return k in self._use_set
+
+		return LazyUseGetter(self._dbapi, self._cpv)
+
+	@property
 	def build_dependencies(self):
-		return PortagePackageDepSet(self._aux_get('DEPEND'))
+		return PortagePackageDepSet(self._aux_get('DEPEND'),
+				self._applied_use)
 
 	@property
 	def run_dependencies(self):
-		return PortagePackageDepSet(self._aux_get('RDEPEND'))
+		return PortagePackageDepSet(self._aux_get('RDEPEND'),
+				self._applied_use)
 
 	@property
 	def post_dependencies(self):
-		return PortagePackageDepSet(self._aux_get('PDEPEND'))
+		return PortagePackageDepSet(self._aux_get('PDEPEND'),
+				self._applied_use)
 
 	def __str__(self):
 		return '=%s' % self._cpv



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-27 16:04 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-27 16:04 UTC (permalink / raw
  To: gentoo-commits

commit:     00be1d0f47dbb2ea5e97f753b0356f0755ff2464
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 27 16:05:28 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jul 27 16:05:28 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=00be1d0f

Portage: support dropping conditionals using use_reduce().

---
 gentoopm/portagepm/depend.py |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
index 9421099..dd96664 100644
--- a/gentoopm/portagepm/depend.py
+++ b/gentoopm/portagepm/depend.py
@@ -3,7 +3,7 @@
 # (c) 2011 Michał Górny <mgorny@gentoo.org>
 # Released under the terms of the 2-clause BSD license.
 
-from portage.dep import paren_reduce
+from portage.dep import paren_reduce, use_reduce
 
 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
 	PMOneOfDep, PMAllOfDep, PMBaseDep
@@ -44,4 +44,42 @@ class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
 
 class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
 	def __init__(self, s, puse):
-		PortageBaseDep.__init__(self, paren_reduce(s), puse)
+		self._depstr = s
+		PortageBaseDep.__init__(self, None, puse)
+
+	def __iter__(self):
+		if self._deps is None:
+			self._deps = paren_reduce(self._depstr)
+		return PortageBaseDep.__iter__(self)
+
+	@property
+	def without_conditionals(self):
+		return PortageUncondPackageDepSet(
+				use_reduce(self._depstr, self._puse))
+
+class PortageUncondDep(PortageBaseDep):
+	def __init__(self, deps):
+		self._deps = deps
+
+	@property
+	def without_conditionals(self):
+		return self
+
+	def __iter__(self):
+		it = iter(self._deps)
+		for d in it:
+			if d == '||':
+				yield PortageUncondOneOfDep(next(it))
+			elif d == '&&':
+				yield PortageUncondAllOfDep(next(it))
+			else:
+				yield PortageAtom(d)
+
+class PortageUncondOneOfDep(PMOneOfDep, PortageUncondDep):
+	pass
+
+class PortageUncondAllOfDep(PMAllOfDep, PortageUncondDep):
+	pass
+
+class PortageUncondPackageDepSet(PortageUncondDep):
+	pass



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-28 16:24 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-28 16:24 UTC (permalink / raw
  To: gentoo-commits

commit:     61f625081294e1948bfa23da71ace43f332cd4ce
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 28 14:53:28 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul 28 14:53:28 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=61f62508

Portage: support '^^' in depstrings (using a hack).

---
 gentoopm/portagepm/depend.py |   22 ++++++++++++++++++----
 gentoopm/portagepm/pkg.py    |    5 +++++
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
index d4f3c33..f33fd5c 100644
--- a/gentoopm/portagepm/depend.py
+++ b/gentoopm/portagepm/depend.py
@@ -6,7 +6,7 @@
 from portage.dep import paren_reduce, use_reduce
 
 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
-	PMAnyOfDep, PMAllOfDep, PMBaseDep
+	PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep
 from gentoopm.portagepm.atom import PortageAtom
 
 class PortageBaseDep(PMBaseDep):
@@ -21,6 +21,8 @@ class PortageBaseDep(PMBaseDep):
 				yield PortageAnyOfDep(next(it), self._puse)
 			elif d == '&&':
 				yield PortageAllOfDep(next(it), self._puse)
+			elif d == '__xor__?':
+				yield PortageExactlyOneOfDep(next(it), self._puse)
 			elif d.endswith('?'):
 				yield PortageConditionalUseDep(next(it),
 						self._puse, d.rstrip('?'))
@@ -33,6 +35,9 @@ class PortageAnyOfDep(PMAnyOfDep, PortageBaseDep):
 class PortageAllOfDep(PMAllOfDep, PortageBaseDep):
 	pass
 
+class PortageExactlyOneOfDep(PMExactlyOneOfDep, PortageBaseDep):
+	pass
+
 class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
 	def __init__(self, deps, puse, flag):
 		PortageBaseDep.__init__(self, deps, puse)
@@ -44,7 +49,11 @@ class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
 
 class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
 	def __init__(self, s, puse):
-		self._depstr = s
+		self._use_reducable = not '^^' in s
+		if not self._use_reducable:
+			# ARGV, paren_reduce() doesn't handle ^^
+			# so we hack it to a __xor__?, UGLY!
+			self._depstr = s.replace('^^', '__xor__?')
 		PortageBaseDep.__init__(self, None, puse)
 
 	def __iter__(self):
@@ -54,8 +63,10 @@ class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
 
 	@property
 	def without_conditionals(self):
-		return PortageUncondAllOfDep(
-				use_reduce(self._depstr, self._puse))
+		if self._use_reducable:
+			return PortageUncondAllOfDep(
+					use_reduce(self._depstr, self._puse))
+		return PMPackageDepSet.without_conditionals.fget(self)
 
 class PortageUncondDep(PortageBaseDep):
 	def __init__(self, deps):
@@ -80,3 +91,6 @@ class PortageUncondAnyOfDep(PMAnyOfDep, PortageUncondDep):
 
 class PortageUncondAllOfDep(PMAllOfDep, PortageUncondDep):
 	pass
+
+class PortageUncondExactlyOneOfDep(PMExactlyOneOfDep, PortageUncondDep):
+	pass

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index ed4c80c..221e728 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -183,6 +183,11 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 		return PortagePackageDepSet(self._aux_get('PDEPEND'),
 				self._applied_use)
 
+	@property
+	def required_use(self):
+		return PortagePackageDepSet(self._aux_get('REQUIRED_USE'),
+				self._applied_use)
+
 	def __str__(self):
 		return '=%s' % self._cpv
 



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-07-28 16:24 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-07-28 16:24 UTC (permalink / raw
  To: gentoo-commits

commit:     5d0ad77204be2449586c1829db33203ffab72f0a
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 28 15:06:25 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jul 28 15:06:25 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=5d0ad772

Portage: support REQUIRED_USE.

---
 gentoopm/portagepm/depend.py |   47 ++++++++++++++++++++---------------------
 gentoopm/portagepm/pkg.py    |    8 +++---
 2 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
index f33fd5c..232a84b 100644
--- a/gentoopm/portagepm/depend.py
+++ b/gentoopm/portagepm/depend.py
@@ -3,31 +3,31 @@
 # (c) 2011 Michał Górny <mgorny@gentoo.org>
 # Released under the terms of the 2-clause BSD license.
 
+from collections import namedtuple
 from portage.dep import paren_reduce, use_reduce
 
 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
 	PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep
-from gentoopm.portagepm.atom import PortageAtom
 
 class PortageBaseDep(PMBaseDep):
-	def __init__(self, deps, puse):
+	def __init__(self, deps, args):
 		self._deps = deps
-		self._puse = puse
+		self._args = args
 
 	def __iter__(self):
 		it = iter(self._deps)
 		for d in it:
 			if d == '||':
-				yield PortageAnyOfDep(next(it), self._puse)
+				yield PortageAnyOfDep(next(it), self._args)
 			elif d == '&&':
-				yield PortageAllOfDep(next(it), self._puse)
+				yield PortageAllOfDep(next(it), self._args)
 			elif d == '__xor__?':
-				yield PortageExactlyOneOfDep(next(it), self._puse)
+				yield PortageExactlyOneOfDep(next(it), self._args)
 			elif d.endswith('?'):
 				yield PortageConditionalUseDep(next(it),
-						self._puse, d.rstrip('?'))
+						self._args, d.rstrip('?'))
 			else:
-				yield PortageAtom(d)
+				yield self._args.cls(d)
 
 class PortageAnyOfDep(PMAnyOfDep, PortageBaseDep):
 	pass
@@ -39,22 +39,23 @@ class PortageExactlyOneOfDep(PMExactlyOneOfDep, PortageBaseDep):
 	pass
 
 class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
-	def __init__(self, deps, puse, flag):
-		PortageBaseDep.__init__(self, deps, puse)
+	def __init__(self, deps, args, flag):
+		PortageBaseDep.__init__(self, deps, args)
 		self._flag = flag
 
 	@property
 	def enabled(self):
-		return self._flag in self._puse
+		return self._flag in self._args.puse
+
+_argtuple = namedtuple('PortageDepArgTuple', ('puse', 'cls'))
 
 class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
-	def __init__(self, s, puse):
+	def __init__(self, s, *args):
 		self._use_reducable = not '^^' in s
-		if not self._use_reducable:
-			# ARGV, paren_reduce() doesn't handle ^^
-			# so we hack it to a __xor__?, UGLY!
-			self._depstr = s.replace('^^', '__xor__?')
-		PortageBaseDep.__init__(self, None, puse)
+		# ARGV, paren_reduce() doesn't handle ^^
+		# so we hack it to a __xor__?, UGLY!
+		self._depstr = s.replace('^^', '__xor__?')
+		PortageBaseDep.__init__(self, None, _argtuple(*args))
 
 	def __iter__(self):
 		if self._deps is None:
@@ -65,13 +66,11 @@ class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
 	def without_conditionals(self):
 		if self._use_reducable:
 			return PortageUncondAllOfDep(
-					use_reduce(self._depstr, self._puse))
+					use_reduce(self._depstr, self._args.puse),
+					self._args)
 		return PMPackageDepSet.without_conditionals.fget(self)
 
 class PortageUncondDep(PortageBaseDep):
-	def __init__(self, deps):
-		self._deps = deps
-
 	@property
 	def without_conditionals(self):
 		return self
@@ -80,11 +79,11 @@ class PortageUncondDep(PortageBaseDep):
 		it = iter(self._deps)
 		for d in it:
 			if d == '||':
-				yield PortageUncondAnyOfDep(next(it))
+				yield PortageUncondAnyOfDep(next(it), self._args)
 			elif d == '&&':
-				yield PortageUncondAllOfDep(next(it))
+				yield PortageUncondAllOfDep(next(it), self._args)
 			else:
-				yield PortageAtom(d)
+				yield self._args.cls(d)
 
 class PortageUncondAnyOfDep(PMAnyOfDep, PortageUncondDep):
 	pass

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 221e728..5af125a 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -171,22 +171,22 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 	@property
 	def build_dependencies(self):
 		return PortagePackageDepSet(self._aux_get('DEPEND'),
-				self._applied_use)
+				self._applied_use, PortageAtom)
 
 	@property
 	def run_dependencies(self):
 		return PortagePackageDepSet(self._aux_get('RDEPEND'),
-				self._applied_use)
+				self._applied_use, PortageAtom)
 
 	@property
 	def post_dependencies(self):
 		return PortagePackageDepSet(self._aux_get('PDEPEND'),
-				self._applied_use)
+				self._applied_use, PortageAtom)
 
 	@property
 	def required_use(self):
 		return PortagePackageDepSet(self._aux_get('REQUIRED_USE'),
-				self._applied_use)
+				self._applied_use, str) # XXX
 
 	def __str__(self):
 		return '=%s' % self._cpv



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-08-12  7:28 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-08-12  7:28 UTC (permalink / raw
  To: gentoo-commits

commit:     a39d818cace9437b122ce1dd5d01d485138e44a0
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 12 07:28:24 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Aug 12 07:28:24 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=a39d818c

Portage: don't use dbapi.repositories[], for 2.1.10.3.

---
 gentoopm/portagepm/repo.py |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index 2486514..e8f3464 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -27,7 +27,14 @@ class PortageRepoDict(PMRepositoryDict):
 				repo_name = self._dbapi.repositories.get_name_for_location(key)
 			else:
 				repo_name = key
-			r = self._dbapi.repositories[repo_name]
+			try:
+				r = self._dbapi.repositories[repo_name]
+			except TypeError: # older portage doesn't have __getitem__() here
+				for r in self._dbapi.repositories:
+					if r.name == repo_name:
+						break
+				else:
+					raise KeyError(repo_name)
 		except KeyError:
 			raise KeyError('No repository matched key %s' % key)
 		else:



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-08-14 14:22 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-08-14 14:22 UTC (permalink / raw
  To: gentoo-commits

commit:     3d1f5a4701c93aea3082ff84bf5de7ceb4a8ad83
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 14 13:42:04 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Aug 14 13:42:04 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=3d1f5a47

Portage: fix category-less atom matching.

---
 gentoopm/portagepm/atom.py |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/gentoopm/portagepm/atom.py b/gentoopm/portagepm/atom.py
index 2f95888..a6f2296 100644
--- a/gentoopm/portagepm/atom.py
+++ b/gentoopm/portagepm/atom.py
@@ -123,10 +123,14 @@ class UncategorisedPackageWrapper(object):
 		self._pkg = pkg
 
 	@property
-	def id(self):
-		cpv = self._pkg.id
+	def _cpv(self):
+		cpv = self._pkg._cpv
 		return 'null/%s' % catsplit(cpv)[1]
 
+	@property
+	def slot(self):
+		return self._pkg.slot
+
 class UnexpandedPortageAtom(CompletePortageAtom):
 	"""
 	An atom without a category specified.



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2011-08-15  7:57 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2011-08-15  7:57 UTC (permalink / raw
  To: gentoo-commits

commit:     61e764b816484e2215ce704e362c34feef050bf8
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Aug 15 07:47:54 2011 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Aug 15 07:47:54 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=61e764b8

Portage: fix incomplete package keys.

---
 gentoopm/portagepm/atom.py |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/atom.py b/gentoopm/portagepm/atom.py
index 48b7e48..0edb241 100644
--- a/gentoopm/portagepm/atom.py
+++ b/gentoopm/portagepm/atom.py
@@ -24,7 +24,8 @@ class PortagePackageKey(PMPackageKey):
 		return catsplit(self)[1]
 
 class PortageIncompletePackageKey(PMIncompletePackageKey, PortagePackageKey):
-	pass
+	def __new__(self, key):
+		return PMIncompletePackageKey.__new__(self, catsplit(key)[1])
 
 class PortagePackageVersion(PMPackageVersion):
 	def __init__(self, cpv):



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2012-12-10 17:52 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2012-12-10 17:52 UTC (permalink / raw
  To: gentoo-commits

commit:     3b865a366bb1e2f22c7dc31ae181e3d0cf8a7c76
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 10 17:52:33 2012 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Dec 10 17:52:33 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=3b865a36

Fix compatibility with PyPy.

It seems that exception arguments are held differently for some reason.

---
 gentoopm/portagepm/repo.py |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/repo.py b/gentoopm/portagepm/repo.py
index 5d68120..6874757 100644
--- a/gentoopm/portagepm/repo.py
+++ b/gentoopm/portagepm/repo.py
@@ -126,7 +126,12 @@ class PortageFilteredRepo(PortageFilteredDBRepo):
 		try:
 			it = self._dbapi.xmatch("match-all", a)
 		except pe.AmbiguousPackageName as e:
-			for pkgcand in e.args[0]:
+			try:
+				candidates = e.args[0]
+			except IndexError: # pypy?
+				candidates = e.value
+
+			for pkgcand in candidates:
 				for p in PortageHackedFilteredRepo(self, pkgcand):
 					yield p
 		else:


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2013-02-03 19:40 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2013-02-03 19:40 UTC (permalink / raw
  To: gentoo-commits

commit:     91c5107fe89fd60caefd0c01cebb1506983ad6c4
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Feb  3 19:39:46 2013 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Feb  3 19:39:46 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=91c5107f

Fix all-of-deps handling in portage.

(API change?)

---
 gentoopm/portagepm/depend.py |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
index ce69cd2..a4614ce 100644
--- a/gentoopm/portagepm/depend.py
+++ b/gentoopm/portagepm/depend.py
@@ -17,7 +17,9 @@ class PortageBaseDep(PMBaseDep):
 	def __iter__(self):
 		it = iter(self._deps)
 		for d in it:
-			if d == '||':
+			if isinstance(d, list):
+				yield PortageAllOfDep(it, self._args)
+			elif d == '||':
 				yield PortageAnyOfDep(next(it), self._args)
 			elif d == '&&':
 				yield PortageAllOfDep(next(it), self._args)


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/
@ 2013-02-16 10:13 Michał Górny
  0 siblings, 0 replies; 32+ messages in thread
From: Michał Górny @ 2013-02-16 10:13 UTC (permalink / raw
  To: gentoo-commits

commit:     d34c9cf0230c5b40c3d5837a6722dcce1ec53057
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 16 10:13:05 2013 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Feb 16 10:13:05 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=d34c9cf0

Fix package sorting in portage.

---
 gentoopm/portagepm/pkg.py |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
index 8ab00b4..d821bf8 100644
--- a/gentoopm/portagepm/pkg.py
+++ b/gentoopm/portagepm/pkg.py
@@ -217,7 +217,12 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
 		if not isinstance(other, PortageDBCPV):
 			raise TypeError('Unable to compare %s against %s' % \
 					(self, other))
-		return self.key < other.key or self.version < other.version
+
+		if self.key < other.key:
+			return True
+		if self.key == other.key:
+			return self.version < other.version
+		return False
 
 class PortageCPV(PortageDBCPV, PMInstallablePackage):
 	def __init__(self, cpv, dbapi, tree, repo_prio):
@@ -252,8 +257,15 @@ class PortageCPV(PortageDBCPV, PMInstallablePackage):
 		if not isinstance(other, PortageCPV):
 			raise TypeError('Unable to compare %s against %s' % \
 					(self, other))
-		return self.key < other.key or self.version < other.version \
-				or self._repo_prio < other._repo_prio
+
+		if self.key < other.key:
+			return True
+		if self.key == other.key:
+			if self.version < other.version:
+				return True
+			if self.version == other.version:
+				return self._repo_prio < other._repo_prio
+		return False
 
 class PortageVDBCPV(PortageDBCPV, PMInstalledPackage):
 	@property


^ permalink raw reply related	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2013-02-16 10:13 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-15  8:39 [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/ Michał Górny
  -- strict thread matches above, loose matches on Subject: below --
2013-02-16 10:13 Michał Górny
2013-02-03 19:40 Michał Górny
2012-12-10 17:52 Michał Górny
2011-08-15  7:57 Michał Górny
2011-08-14 14:22 Michał Górny
2011-08-12  7:28 Michał Górny
2011-07-28 16:24 Michał Górny
2011-07-28 16:24 Michał Górny
2011-07-27 16:04 Michał Górny
2011-07-27  8:26 Michał Górny
2011-07-26 17:30 Michał Górny
2011-07-26 17:18 Michał Górny
2011-07-25 17:06 Michał Górny
2011-07-21  8:47 Michał Górny
2011-07-21  8:47 Michał Górny
2011-07-20  9:41 Michał Górny
2011-07-19 20:53 Michał Górny
2011-07-19 20:53 Michał Górny
2011-07-19 20:53 Michał Górny
2011-07-19 20:53 Michał Górny
2011-07-15 13:32 Michał Górny
2011-07-15 12:34 Michał Górny
2011-07-14 14:05 Michał Górny
2011-07-14 13:31 Michał Górny
2011-07-10 22:17 Michał Górny
2011-07-10 22:17 Michał Górny
2011-07-10 22:17 Michał Górny
2011-07-08  7:18 Michał Górny
2011-07-07  9:51 Michał Górny
2011-07-06 20:54 Michał Górny
2011-07-06 16:03 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