devtool: return specific exit code for incompatible recipes
Certain recipes cannot be used with devtool extract / modify / upgrade - usually because they don't provide any source. Return a specific exit code (4) so that scripts such as scripts/contrib/devtool-stress.py know the difference between this and a genuine failure. (From OE-Core rev: ffd295fed4ab81fc0bd00bb145ef4d72c49584bf) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
d56caf3408
commit
5c91537ab2
|
@ -334,7 +334,7 @@ def main():
|
||||||
except DevtoolError as err:
|
except DevtoolError as err:
|
||||||
if str(err):
|
if str(err):
|
||||||
logger.error(str(err))
|
logger.error(str(err))
|
||||||
ret = 1
|
ret = err.exitcode
|
||||||
except argparse_oe.ArgumentUsageError as ae:
|
except argparse_oe.ArgumentUsageError as ae:
|
||||||
parser.error_subcommand(ae.message, ae.subcommand)
|
parser.error_subcommand(ae.message, ae.subcommand)
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,11 @@ import re
|
||||||
|
|
||||||
logger = logging.getLogger('devtool')
|
logger = logging.getLogger('devtool')
|
||||||
|
|
||||||
|
|
||||||
class DevtoolError(Exception):
|
class DevtoolError(Exception):
|
||||||
"""Exception for handling devtool errors"""
|
"""Exception for handling devtool errors"""
|
||||||
pass
|
def __init__(self, message, exitcode=1):
|
||||||
|
super(DevtoolError, self).__init__(message)
|
||||||
|
self.exitcode = exitcode
|
||||||
|
|
||||||
|
|
||||||
def exec_build_env_command(init_path, builddir, cmd, watch=False, **options):
|
def exec_build_env_command(init_path, builddir, cmd, watch=False, **options):
|
||||||
|
|
|
@ -264,28 +264,30 @@ def _check_compatible_recipe(pn, d):
|
||||||
"""Check if the recipe is supported by devtool"""
|
"""Check if the recipe is supported by devtool"""
|
||||||
if pn == 'perf':
|
if pn == 'perf':
|
||||||
raise DevtoolError("The perf recipe does not actually check out "
|
raise DevtoolError("The perf recipe does not actually check out "
|
||||||
"source and thus cannot be supported by this tool")
|
"source and thus cannot be supported by this tool",
|
||||||
|
4)
|
||||||
|
|
||||||
if pn in ['kernel-devsrc', 'package-index'] or pn.startswith('gcc-source'):
|
if pn in ['kernel-devsrc', 'package-index'] or pn.startswith('gcc-source'):
|
||||||
raise DevtoolError("The %s recipe is not supported by this tool" % pn)
|
raise DevtoolError("The %s recipe is not supported by this tool" % pn, 4)
|
||||||
|
|
||||||
if bb.data.inherits_class('image', d):
|
if bb.data.inherits_class('image', d):
|
||||||
raise DevtoolError("The %s recipe is an image, and therefore is not "
|
raise DevtoolError("The %s recipe is an image, and therefore is not "
|
||||||
"supported by this tool" % pn)
|
"supported by this tool" % pn, 4)
|
||||||
|
|
||||||
if bb.data.inherits_class('populate_sdk', d):
|
if bb.data.inherits_class('populate_sdk', d):
|
||||||
raise DevtoolError("The %s recipe is an SDK, and therefore is not "
|
raise DevtoolError("The %s recipe is an SDK, and therefore is not "
|
||||||
"supported by this tool" % pn)
|
"supported by this tool" % pn, 4)
|
||||||
|
|
||||||
if bb.data.inherits_class('packagegroup', d):
|
if bb.data.inherits_class('packagegroup', d):
|
||||||
raise DevtoolError("The %s recipe is a packagegroup, and therefore is "
|
raise DevtoolError("The %s recipe is a packagegroup, and therefore is "
|
||||||
"not supported by this tool" % pn)
|
"not supported by this tool" % pn, 4)
|
||||||
|
|
||||||
if bb.data.inherits_class('meta', d):
|
if bb.data.inherits_class('meta', d):
|
||||||
raise DevtoolError("The %s recipe is a meta-recipe, and therefore is "
|
raise DevtoolError("The %s recipe is a meta-recipe, and therefore is "
|
||||||
"not supported by this tool" % pn)
|
"not supported by this tool" % pn, 4)
|
||||||
|
|
||||||
if bb.data.inherits_class('externalsrc', d) and d.getVar('EXTERNALSRC', True):
|
if bb.data.inherits_class('externalsrc', d) and d.getVar('EXTERNALSRC', True):
|
||||||
|
# Not an incompatibility error per se, so we don't pass the error code
|
||||||
raise DevtoolError("externalsrc is currently enabled for the %s "
|
raise DevtoolError("externalsrc is currently enabled for the %s "
|
||||||
"recipe. This prevents the normal do_patch task "
|
"recipe. This prevents the normal do_patch task "
|
||||||
"from working. You will need to disable this "
|
"from working. You will need to disable this "
|
||||||
|
@ -498,7 +500,7 @@ def _extract_source(srctree, keep_temp, devbranch, sync, d):
|
||||||
|
|
||||||
if 'noexec' in (d.getVarFlags('do_unpack', False) or []):
|
if 'noexec' in (d.getVarFlags('do_unpack', False) or []):
|
||||||
raise DevtoolError("The %s recipe has do_unpack disabled, unable to "
|
raise DevtoolError("The %s recipe has do_unpack disabled, unable to "
|
||||||
"extract source" % pn)
|
"extract source" % pn, 4)
|
||||||
|
|
||||||
if not sync:
|
if not sync:
|
||||||
# Prepare for shutil.move later on
|
# Prepare for shutil.move later on
|
||||||
|
|
Loading…
Reference in New Issue