Skip to content

Instantly share code, notes, and snippets.

@GregDurys
Last active October 16, 2016 12:09
Show Gist options
  • Select an option

  • Save GregDurys/5767f4daba433872932b718e79d63c88 to your computer and use it in GitHub Desktop.

Select an option

Save GregDurys/5767f4daba433872932b718e79d63c88 to your computer and use it in GitHub Desktop.
The..brew
#!/usr/bin/env bash
# Description:
# POC around brew cask. The poor-man's missing ' brew cask upgrade' switch o/
# Notes:
# [..] One brew to rule them all:
# uberbrew () { brew -v update; brew upgrade; brew cleanup; brewcaskupgrade.sh upgrade
# brew cask cleanup ; }
# Author: ment4t
# Revision: 0.2
#expecting the unexpected
set -o pipefail
set -o errexit
set -o nounset
set -o errtrace
# how to handle casks with version "latest" by default
update_latest=0 # 1 to update ; 0 to skip
usage() { # usage funtion
cat>&2<<-EOF
Description:
Either:
1) check if locally installed casks need upgrading
2) upgrade old stuff
Usage: ${0##/*/} [-a|--all] [-v|--verbose] action
actions:
check Check all installed casks for upgrades
upgrade Upgrade old casks
optional arguments:
-a, --all Treat "latest" versions as old, ie forced-upgrade mode
-v, --verbose Add verbosity
EOF
}
caskVer() {
unset arr
local name ver line st
while read -r line ; do
if ! [[ ${name:-} ]] ; then
name=${name-${line%%:*}}
ver=${ver-${line##*:}} ; ver=${ver# *}
continue
fi
if [[ ${line##*/} =~ $ver ]] ; then # simple pattern matching for now
if [[ $ver == "latest" ]] ; then
if [[ $update_latest -eq 0 ]] ; then st=1 ; break
elif [[ $update_latest -eq 1 ]] ; then st=2 ; break
fi
else st=0 ; break
fi
else st=3
fi
done < <(brew cask info "$@")
arr=([0]="$name" [1]="$st" [2]="$ver")
}
checkCasks() {
while read -r cask ; do
caskVer "$cask"
set -- "${arr[@]}"
case $2 in
0) echo "$cask OK" ;;
1) echo "$cask OK [SAME]" ;;
2) echo "$cask OLD [SAME]" ;;
3) echo "$cask OLD"
esac
done < <(brew cask list)
}
upgradeCasks () {
unset arrdone
local arrdone=()
while read -r cask ; do
caskVer "$cask"
set -- "${arr[@]}"
case $2 in
2|3) brew cask install --force "$cask"
arrdone+=("$1 to $3")
;;
*) continue
esac
done < <(brew cask list)
[[ ${arrdone[@]} ]] \
&& printf '[+] Upgraded %s\n' "${arrdone[@]}"\
|| echo '[*] Nothing to upgrade.'
}
for x ; do
case $x in
-a|--all) update_latest=1 ; shift ;;
-v|--verbose) set -x ; shift ;;
check) checkCasks ; exit ;;
upgrade) upgradeCasks ; exit ;;
-h|--help) usage ; exit ;;
?*) usage ; printf -- >&2 '[!] Error: Unknown option: %s\n' "$1" ; exit 3 ;;
-?*) usage ; printf -- >&2 '[!] Error: Unknown switch: %s\n' "$1" ; exit 3 ;;
--) break ; exit
esac
done
usage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment