public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/depres/simpledeprule/, roverlay/depres/
@ 2012-08-03 13:38 André Erdmann
  0 siblings, 0 replies; only message in thread
From: André Erdmann @ 2012-08-03 13:38 UTC (permalink / raw
  To: gentoo-commits

commit:     9373273f7536b5d34bb9872e6e9ca4b995f724cf
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Fri Aug  3 11:40:56 2012 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Fri Aug  3 11:40:56 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=9373273f

ebuild: report unresolved but optional deps

---
 roverlay/depres/channels.py              |   35 ++++++++++++++++++++---------
 roverlay/depres/simpledeprule/console.py |    8 +++---
 roverlay/ebuild/depres.py                |   22 ++++++++++++++----
 3 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/roverlay/depres/channels.py b/roverlay/depres/channels.py
index 626d7a0..bd2400f 100644
--- a/roverlay/depres/channels.py
+++ b/roverlay/depres/channels.py
@@ -129,11 +129,11 @@ class _EbuildJobChannelBase ( DependencyResolverChannel ):
 
 		raises: Exception
 		"""
-		if not self._collected_deps is None:
+		if self._collected_deps is not None:
 			self.logger.debug (
-				"returning collected deps: %s." % self._collected_deps
+				"returning collected deps: {}.".format ( self._collected_deps )
 			)
-			return self._collected_deps
+			return ( self._collected_deps, self._unresolvable_deps )
 		raise Exception ( "cannot do that" )
 	# --- end of collect_dependencies (...) ---
 
@@ -159,11 +159,15 @@ class EbuildJobChannel ( _EbuildJobChannelBase ):
 		                           frozenset
 		                           Note that this doesn't filter out duplicates!
 
-		Returns the list of resolved dependencies if all could be resolved,
-		else None.
+		Returns a 2-tuple ( <resolved dependencies>, <unresolvable dep strings> )
+		if all mandatory dependencies could be resolved, else None.
+		<Unresolvable dep strings> will be None unless optional dependencies
+		could not be resolved.
 		"""
-		dep_collected = list()
-		resolved = dep_collected.append
+		dep_collected     = list()
+		dep_unresolveable = list()
+		resolved          = dep_collected.append
+		unresolvable      = dep_unresolveable.append
 
 		def handle_queue_item ( dep_env ):
 			self._depdone += 1
@@ -178,8 +182,10 @@ class EbuildJobChannel ( _EbuildJobChannelBase ):
 				ret = True
 			elif deptype.mandatory & ~dep_env.deptype_mask:
 				# not resolved, but deptype has no mandatory bit set
-				#  => dep is not required, resolve as None
+				#  => dep is not required, resolve as None and add it to
+				#     the list of unresolvable deps
 				resolved ( None )
+				unresolvable ( dep_env.dep_str )
 				ret = True
 			# else failed
 
@@ -211,11 +217,18 @@ class EbuildJobChannel ( _EbuildJobChannelBase ):
 			# using a set allows easy difference() operations between
 			# DEPEND/RDEPEND/.. later, seewave requires sci-libs/fftw
 			# in both DEPEND and RDEPEND for example
-			self._collected_deps = frozenset ( dep_collected )
+			self._collected_deps    = frozenset ( dep_collected )
+			self._unresolvable_deps = frozenset ( dep_unresolveable ) \
+				if len ( dep_unresolveable ) > 0 else None
+
 			if preserve_order:
-				return tuple ( dep_collected )
+				return (
+					tuple ( dep_collected ),
+					tuple ( dep_unresolveable ) \
+						if len ( dep_unresolveable ) > 0 else None
+				)
 			else:
-				return self._collected_deps
+				return ( self._collected_deps, self._unresolvable_deps )
 		else:
 			if close_if_unresolvable: self.close()
 			return None

diff --git a/roverlay/depres/simpledeprule/console.py b/roverlay/depres/simpledeprule/console.py
index 8292f4c..ac2989e 100644
--- a/roverlay/depres/simpledeprule/console.py
+++ b/roverlay/depres/simpledeprule/console.py
@@ -81,7 +81,7 @@ class DepResConsole ( object ):
 
 		self._cwd = None
 
-		self.shlex_active = True
+		self.shlex_active = False
 
 		self.PS1 = "cmd % "
 
@@ -383,11 +383,11 @@ class DepResConsole ( object ):
 
 			if deps is None:
 				self.stdout (
-					'Channel returned {!r}. '
-					'At least one dep couldn\'t be resolved.\n'.format ( deps )
+					'Channel returned None. '
+					'At least one dep couldn\'t be resolved.\n'
 			)
 			else:
-				self.stdout ( "Resolved as: {!r}\n".format ( deps ) )
+				self.stdout ( "Resolved as: {!r}\n".format ( deps [0] ) )
 	# --- end of cmd_resolve (...) ---
 
 	def _cmd_set_or_unset ( self, argv, is_set ):

diff --git a/roverlay/ebuild/depres.py b/roverlay/ebuild/depres.py
index b08c913..9e0d102 100644
--- a/roverlay/ebuild/depres.py
+++ b/roverlay/ebuild/depres.py
@@ -40,9 +40,9 @@ FIELDS = {
 	'LinkingTo'          : deptype.PKG,
 }
 EBUILDVARS = {
-	'R_SUGGESTS' : evars.R_SUGGESTS,
-	'DEPENDS'    : evars.DEPEND,
-	'RDEPENDS'   : evars.RDEPEND,
+	'R_SUGGESTS'   : evars.R_SUGGESTS,
+	'DEPENDS'      : evars.DEPEND,
+	'RDEPENDS'     : evars.RDEPEND,
 }
 
 
@@ -103,7 +103,6 @@ class EbuildDepRes ( object ):
 			if self._wait_resolve():
 				self._make_result()
 				self.status = 0
-
 			else:
 				# unresolvable
 				self.logger.info ( "Cannot satisfy dependencies!" )
@@ -184,9 +183,13 @@ class EbuildDepRes ( object ):
 		_depmap = dict()
 		# two for dep_type, <sth> loops to safely determine the actual deps
 		# (e.g. whether to include R_SUGGESTS in RDEPEND)
+
+		unresolvable_optional_deps = set()
+
 		for dep_type, channel in self._channels.items():
+			channel_result = channel.collect_dependencies()
 			deplist = tuple ( filter (
-				depfilter.dep_allowed, channel.collect_dependencies() )
+				depfilter.dep_allowed, channel_result [0] )
 			)
 
 			if len ( deplist ) > 0:
@@ -197,6 +200,9 @@ class EbuildDepRes ( object ):
 				_depmap [dep_type] = deplist
 			# else: (effectively) no dependencies for dep_type
 
+			if channel_result [1] is not None:
+				unresolvable_optional_deps |= channel_result [1]
+
 		self._close_channels()
 
 		self.has_suggests = bool ( 'R_SUGGESTS' in _depmap )
@@ -211,6 +217,12 @@ class EbuildDepRes ( object ):
 				)
 			)
 
+		if unresolvable_optional_deps:
+#			if not self.has_suggests: raise AssertionError() #?
+			_result.append (
+				evars.MISSINGDEPS ( unresolvable_optional_deps, do_sort=True )
+			)
+
 		if self.create_iuse:
 			_result.append ( evars.IUSE ( using_suggests=self.has_suggests ) )
 


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2012-08-03 13:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-03 13:38 [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/depres/simpledeprule/, roverlay/depres/ André Erdmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox