Add gentoolkitNonZeroExit exception
authorPaul Varner <fuzzyray@gentoo.org>
Thu, 6 Jan 2011 14:22:07 +0000 (08:22 -0600)
committerPaul Varner <fuzzyray@gentoo.org>
Thu, 6 Jan 2011 15:48:52 +0000 (09:48 -0600)
This exception should only be used when an error is not fatal and the
absence of information means no data was found.  The return_code
parameter can be used to set the exit value.

Have the equery list module when in quiet mode return an exit status of
3.  This is needed to prevent 'euse -I' from printing many 'No installed
packages matching ...' error messages.

bin/equery
man/equery.1
pym/gentoolkit/equery/list_.py
pym/gentoolkit/errors.py

index 54c3a0747e5ba794f41bda2bb0056201dee51908..343f92da776b11ba2716ea48f82a43d9fa1e475d 100755 (executable)
@@ -36,6 +36,8 @@ from gentoolkit import equery, errors
 
 try:
        equery.main()
+except errors.GentoolkitNonZeroExit as err:
+       sys.exit(err.return_code)
 except errors.GentoolkitException as err:
        if '--debug' in sys.argv or bool(os.getenv('DEBUG', False)):
                raise
index c912831790d8a32593b1085c5c8468d4fe9b260f..85380058b04fb0f81c4873a19d539afbf9ea51e5 100644 (file)
@@ -448,7 +448,10 @@ Slot:
 .br 
 The fourth field, after the colon, is the package's slot. \fB0\fP is the default slot. To find all packages with multiple slots installed, use \fB\-\-duplicates\fP.
 .P
-\fBNote:\fP Because it takes extra processing time to determine the location, mask status and slot, you can speed up output by passing the \fB\-\-quiet\fP global option to \fBequery\fP when you don't care about the extra information.
+\fBNote:\fP Because it takes extra processing time to determine the location, mask status and slot, you can speed up output by passing the \fB\-\-quiet\fP global option to \fBequery\fP when you don't care about the extra information. 
+
+\fBNote:\fP Additionally, when using \-\-quiet, if no matches are found, instead of printing an error, the equery list module will return with an exit value of 3.
+>>>>>>> 61db505... Add gentoolkitNonZeroExit exception
 
 .P
 .I R "EXAMPLES" ":"
index 8c4b8715faac798527c7d94f77546ceac5dbd4bf..92b3c1eac8df62e0de65cf334ed25c077b708e05 100644 (file)
@@ -19,7 +19,7 @@ from getopt import gnu_getopt, GetoptError
 
 import gentoolkit
 import gentoolkit.pprinter as pp
-import gentoolkit.errors as errors
+from gentoolkit import errors
 from gentoolkit.equery import format_options, mod_usage, CONFIG
 from gentoolkit.helpers import get_installed_cpvs
 from gentoolkit.helpers import get_bintree_cpvs
@@ -193,14 +193,14 @@ def main(input_args):
                        print()
 
                # if we are in quiet mode, do not raise GentoolkitNoMatches exception
-               # TODO: Return a non-zero exit status
+               # instead we raise GentoolkitNonZeroExit to exit with an exit value of 3
                try:
                        matches = query.smart_find(**QUERY_OPTS)
                except errors.GentoolkitNoMatches:
                        if CONFIG['verbose']:
                                raise
                        else:
-                               continue
+                               raise errors.GentoolkitNonZeroExit(3)
 
                # Find duplicate packages
                if QUERY_OPTS["duplicates"]:
index 152f660e971a96e5df17c23b6146c4b035f88fd2..15fef247c7ccc06a92c8e65e6462c3ce525f89bb 100644 (file)
@@ -16,7 +16,8 @@ __all__ = (
        'GentoolkitInvalidVersion',
        'GentoolkitNoMatches',
        'GentoolkitSetNotFound',
-       'GentoolkitUnknownKeyword'
+       'GentoolkitUnknownKeyword',
+       'GentoolkitNonZeroExit'
 )
 
 # ==========
@@ -145,4 +146,12 @@ class GentoolkitUnknownKeyword(GentoolkitException):
                        "'%s', KEYWORDS = '%s'\nUSE flags = '%s'"
                        % (self.query, self.keywords, self.use))
 
+
+class GentoolkitNonZeroExit(GentoolkitException):
+       """Used to signal, that a non-fatal, no warning error occurred.
+          The primary use case is for not returning any data."""
+       def __init__(self, return_code=1, is_serious=False):
+               GentoolkitException.__init__(self, is_serious=is_serious)
+               self.return_code = return_code
+
 # vim: set ts=4 sw=4 tw=79: