# 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) # 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[*]}" exit 1 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 }