From 39f4d803f93ec05b7ef51682da32de676e791974 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Date: Tue, 13 Dec 2016 15:36:23 +0100 Subject: [PATCH] Raise an exception if an ssh command fails ade install failed for me as my target device doesn't have ribchester-bundle, however it did so without giving any indication something was wrong at all. Sort this out by raising an exception if the remote command returns a non-zero exit status. Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Differential Revision: https://phabricator.apertis.org/D5260 --- tools/ade | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tools/ade b/tools/ade index 7cda4e3..70ab3ee 100755 --- a/tools/ade +++ b/tools/ade @@ -105,6 +105,19 @@ class NotSupportedError(Exception): def __init__(self): pass +class CommandFailedError(Exception): + def __init__(self, stdout, stderr, exit_status): + self.stdout = stdout + self.stderr = stderr + self.exit_status = exit_status + + def __str__(self): + return """Exit code: {} + Stdout: {} + Stderr: {}""".format(self.exit_status, + self.stdout, + self.stderr) + def is_valid_url(url): result = urlparse(url) @@ -221,7 +234,13 @@ class Device: def _exec(self, *args): with closing(self._connect()) as ssh: stdin, stdout, stderr = ssh.exec_command(' '.join(args)) - return stdout.read().decode().strip() + out = stdout.read().decode().strip() + err = stderr.read().decode().strip() + status = stdout.channel.recv_exit_status () + if status != 0: + raise CommandFailedError(out, err, status) + + return out def load_sysroot_version(self): try: -- GitLab