diff options
Diffstat (limited to 'util/ubertest/cmd.sh')
-rw-r--r-- | util/ubertest/cmd.sh | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/util/ubertest/cmd.sh b/util/ubertest/cmd.sh new file mode 100644 index 00000000..1d1c47a1 --- /dev/null +++ b/util/ubertest/cmd.sh @@ -0,0 +1,137 @@ +#!/bin/sh +# +# This file is part of the flashrom project. It is derived from +# board_status.sh in coreboot. +# +# Copyright (C) 2016 Google Inc. +# Copyright (C) 2014 Sage Electronic Engineering, LLC. + +USE_CUSTOM_HOOKS=0 +if [ -n "$CUSTOM_HOOKS_FILENAME" ]; then + USE_CUSTOM_HOOKS=1 + . "$CUSTOM_HOOKS_FILENAME" + if [ $? -ne 0 ]; then + echo "Failed to source custom hooks file." + exit $EXIT_FAILURE + fi + + if ! custom_hook_sanity_check; then + echo "Failed to run sanity check for custom hooks." + exit $EXIT_FAILURE + fi +fi + +# test a command +# +# $1: 0 ($LOCAL) to run command locally, +# 1 ($REMOTE) to run remotely if remote host defined +# $2: command to test +# $3: 0 ($FATAL) Exit with an error if the command fails +# 1 ($NONFATAL) Don't exit on command test failure +test_cmd() +{ + local rc + local cmd__="$(echo $2 | cut -d ' ' -f -1)" + local args="$(echo $2 | cut -d ' ' -f 2-)" + + if [ -e "$cmd__" ]; then + return + fi + + if [ "$1" -eq "$REMOTE" ] && [ -n "$REMOTE_HOST" ]; then + ssh $REMOTE_PORT_OPTION root@${REMOTE_HOST} command -v "$cmd__" $args > /dev/null 2>&1 + rc=$? + else + command -v "$cmd__" $args >/dev/null 2>&1 + rc=$? + fi + + if [ $rc -eq 0 ]; then + return 0 + fi + + if [ "$3" = "1" ]; then + return 1 + fi + + echo "$2 not found" + exit $EXIT_FAILURE +} + +# Same args as cmd() but with the addition of $4 which determines if the +# command should be totally silenced or not. +_cmd() +{ + local silent=$4 + local rc=0 + + if [ -n "$3" ]; then + pipe_location="${3}" + else + pipe_location="/dev/null" + fi + + if [ $1 -eq $REMOTE ] && [ -n "$REMOTE_HOST" ]; then + if [ $silent -eq 0 ]; then + ssh $REMOTE_PORT_OPTION "root@${REMOTE_HOST}" "$2" > "$pipe_location" 2>/dev/null + rc=$? + else + ssh $REMOTE_PORT_OPTION "root@${REMOTE_HOST}" "$2" >/dev/null 2>&1 + rc=$? + fi + else + if [ $USE_CUSTOM_HOOKS -eq 1 ]; then + preflash_hook $1 "$2" "$3" $4 + fi + + if [ $silent -eq 0 ]; then + $SUDO_CMD $2 > "$pipe_location" 2>/dev/null + rc=$? + else + $SUDO_CMD $2 >/dev/null 2>&1 + rc=$? + fi + + if [ $USE_CUSTOM_HOOKS -eq 1 ]; then + postflash_hook $1 "$2" "$3" $4 + fi + fi + + return $rc +} + +# run a command +# +# $1: 0 ($LOCAL) to run command locally, +# 1 ($REMOTE) to run remotely if remote host defined +# $2: command +# $3: filename to direct output of command into +cmd() +{ + _cmd $1 "$2" "$3" 0 + + if [ $? -eq 0 ]; then + return + fi + + echo "Failed to run \"$2\", aborting" + rm -f "$3" # don't leave an empty file + return $EXIT_FAILURE +} + +# run a command silently +# +# $1: 0 ($LOCAL) to run command locally, +# 1 ($REMOTE) to run remotely if remote host defined +# $2: command +scmd() +{ + _cmd $1 "$2" "" 1 + + if [ $? -eq 0 ]; then + return + fi + + echo "Failed to run \"$2\", aborting" + return $EXIT_FAILURE +} |