Last active
October 16, 2016 12:09
-
-
Save GregDurys/5767f4daba433872932b718e79d63c88 to your computer and use it in GitHub Desktop.
The..brew
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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