diff options
Diffstat (limited to '.jenkins/common.sh')
-rw-r--r-- | .jenkins/common.sh | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/.jenkins/common.sh b/.jenkins/common.sh index 25ca0ccbdb..5a3c891ae6 100644 --- a/.jenkins/common.sh +++ b/.jenkins/common.sh @@ -25,7 +25,41 @@ set -ex # system; to find out more, grep for this string in ossci-job-dsl. echo "ENTERED_USER_LAND" -trap cleanup EXIT +# compositional trap taken from https://stackoverflow.com/a/7287873/23845 + +# note: printf is used instead of echo to avoid backslash +# processing and to properly handle values that begin with a '-'. + +log() { printf '%s\n' "$*"; } +error() { log "ERROR: $*" >&2; } +fatal() { error "$@"; exit 1; } + +# appends a command to a trap +# +# - 1st arg: code to add +# - remaining args: names of traps to modify +# +trap_add() { + trap_add_cmd=$1; shift || fatal "${FUNCNAME} usage error" + for trap_add_name in "$@"; do + trap -- "$( + # helper fn to get existing trap command from output + # of trap -p + extract_trap_cmd() { printf '%s\n' "$3"; } + # print existing trap command with newline + eval "extract_trap_cmd $(trap -p "${trap_add_name}")" + # print the new trap command + printf '%s\n' "${trap_add_cmd}" + )" "${trap_add_name}" \ + || fatal "unable to add to trap ${trap_add_name}" + done +} +# set the trace attribute for the above function. this is +# required to modify DEBUG or RETURN traps because functions don't +# inherit them unless the trace attribute is set +declare -f -t trap_add + +trap_add cleanup EXIT # Converts: # pytorch-builds/pytorch-macos-10.13-py3-build-test ==> pytorch-macos-10.13-py3-build-test |