From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/depres/simpledeprule/, roverlay/depres/
Date: Fri, 3 Aug 2012 13:38:14 +0000 (UTC) [thread overview]
Message-ID: <1343994056.9373273f7536b5d34bb9872e6e9ca4b995f724cf.dywi@gentoo> (raw)
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 ) )
reply other threads:[~2012-08-03 13:38 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1343994056.9373273f7536b5d34bb9872e6e9ca4b995f724cf.dywi@gentoo \
--to=dywi@mailerd.de \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox