* [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