# shellcheck shell=bash # shellcheck disable=SC2034 # string formatters if [[ -t 1 ]] then Tty_escape() { printf "\033[%sm" "$1"; } else Tty_escape() { :; } fi Tty_mkbold() { Tty_escape "1;${1:-39}"; } Tty_red=$(Tty_mkbold 31) Tty_green=$(Tty_mkbold 32) Tty_brown=$(Tty_mkbold 33) Tty_blue=$(Tty_mkbold 34) Tty_magenta=$(Tty_mkbold 35) Tty_cyan=$(Tty_mkbold 36) Tty_white=$(Tty_mkbold 37) Tty_underscore=$(Tty_escape 38) Tty_bold=$(Tty_mkbold 39) Tty_reset=$(Tty_escape 0) msg_prefix="" # fatal: Report fatal error # USAGE: fatal ... fatal() { echo "${Tty_red}${msg_prefix}FATAL ERROR:${Tty_reset} $*" >&2 exit 1 } # error: Report error # USAGE: error ... error() { echo "${Tty_red}${msg_prefix}ERROR:${Tty_reset} $*" >&2 } # warn: Report warning # USAGE: warn ... warn() { echo "${Tty_blue}${msg_prefix}Warning:${Tty_reset} $*" >&2 } # info: Informational message # USAGE: info ... info() { echo "${Tty_green}${msg_prefix}Info:${Tty_reset} $*" >&2 } # need_progs: Checks for command dependencies # USAGE: need_progs ... need_progs() { local missing=() local i for i in "$@" do type -P "${i}" &>/dev/null || missing+=("${i}") done if [[ ${#missing[@]} -gt 0 ]] then fatal "Commands missing: ${missing[*]}" fi } # cmd: Show command being run # USAGE: cmd ... cmd() { echo "${Tty_cyan}>>> $*${Tty_reset}" >&2 command "$@" } # git_in: Run Git command in repo # USAGE: git_in ... git_in() { local repo=$1 shift pushd "${repo}" >/dev/null || fatal "Can't cd to '${repo}'" cmd git "$@" popd >/dev/null || exit }