Michał Górny avatar Michał Górny committed ec043d6

Paludis: support blocking atoms.

Comments (0)

Files changed (2)

gentoopm/paludispm/atom.py

 				paludis.RepositoryNameError):
 			raise InvalidAtomStringError('Incorrect atom: %s' % s)
 
-	def __init__(self, s, env):
+	def __init__(self, s, env, block = ''):
 		self._incomplete = False
+		self._blocking = block
 		if isinstance(s, paludis.PackageDepSpec):
 			self._atom = s
 		else:
 	def __str__(self):
 		if self._incomplete:
 			raise ValueError('Unable to stringify incomplete atom')
-		return str(self._atom)
+		return '%s%s' % (self._blocking, str(self._atom))
 
 	@property
 	def complete(self):

gentoopm/paludispm/depend.py

 # (c) 2011 Michał Górny <mgorny@gentoo.org>
 # Released under the terms of the 2-clause BSD license.
 
-import paludis
+import paludis, re
 
 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
 	PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep
 from gentoopm.paludispm.atom import PaludisAtom
 
+_block_re = re.compile('^!*')
+
 class PaludisBaseDep(PMBaseDep):
 	def __init__(self, deps, pkg):
 		self._deps = deps
 		for d in self._deps:
 			if isinstance(d, paludis.PackageDepSpec):
 				yield PaludisAtom(d, self._pkg._env)
+			elif isinstance(d, paludis.BlockDepSpec):
+				yield PaludisAtom(d.blocking, self._pkg._env,
+						block = _block_re.match(d.text).group(0))
 			elif isinstance(d, paludis.AnyDepSpec):
 				yield PaludisAnyOfDep(d, self._pkg)
 			elif isinstance(d, paludis.AllDepSpec):
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.