oeqa.utils.commands: limit runCmd exception output

Make it possible to limit the length of output lines shown in runCmd
exceptions. E.g when running bitbake we easily get thousands of lines of
log output, where only the last few (tens) are interesting or relevant
when an error occurs.

(From OE-Core rev: 403dd205828002d6ef4e8b474aedb6082289e22f)

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Markus Lehtonen 2017-03-24 16:43:24 +02:00 committed by Richard Purdie
parent 5e3eaf7c57
commit 68190b5115
1 changed files with 10 additions and 3 deletions

View File

@ -97,7 +97,8 @@ class Result(object):
pass
def runCmd(command, ignore_status=False, timeout=None, assert_error=True, native_sysroot=None, **options):
def runCmd(command, ignore_status=False, timeout=None, assert_error=True,
native_sysroot=None, limit_exc_output=0, **options):
result = Result()
if native_sysroot:
@ -117,10 +118,16 @@ def runCmd(command, ignore_status=False, timeout=None, assert_error=True, native
result.pid = cmd.process.pid
if result.status and not ignore_status:
exc_output = result.output
if limit_exc_output > 0:
split = result.output.splitlines()
if len(split) > limit_exc_output:
exc_output = "\n... (last %d lines of output)\n" % limit_exc_output + \
'\n'.join(split[-limit_exc_output:])
if assert_error:
raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, result.output))
raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, exc_output))
else:
raise CommandError(result.status, command, result.output)
raise CommandError(result.status, command, exc_output)
return result