diff options
Diffstat (limited to 'Library/Homebrew/cask/developer/bin/fix_outdated_appcasts')
| -rwxr-xr-x | Library/Homebrew/cask/developer/bin/fix_outdated_appcasts | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts b/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts new file mode 100755 index 000000000..9915b5339 --- /dev/null +++ b/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts @@ -0,0 +1,78 @@ +#!/bin/bash + +IFS=$'\n' + +readonly caskroom_repos_dir='/tmp/caskroom_repos' +readonly caskroom_repos=(homebrew-cask homebrew-versions homebrew-fonts homebrew-eid) + +if [[ ! $(which 'ghi') ]] || ! security find-internet-password -s github.com -l 'ghi token' &> /dev/null; then + echo -e "$(tput setaf 1) + This script requires 'ghi' installed and configured. + If you have [Homebrew](http://brew.sh), you can install it with 'brew install ghi'. + To configure it, run 'ghi config --auth <username>'. Your Github password will be required, but is never stored. + $(tput sgr0)" | sed -E 's/ {4}//' >&2 + exit 1 +fi + +if [[ ! $(which 'cask-repair') ]]; then + echo -e "$(tput setaf 1) + This script requires 'cask-repair'. + If you have [Homebrew](http://brew.sh), you can install it with 'brew install vitorgalvao/tiny-scripts/cask-repair'. + $(tput sgr0)" | sed -E 's/ {4}//' >&2 + exit 1 +fi + +function message { + echo "${1}" +} + +function go_to_repos_dir { + [[ ! -d "${caskroom_repos_dir}" ]] && mkdir -p "${caskroom_repos_dir}" + cd "${caskroom_repos_dir}" || exit 1 +} + +function go_to_repo_and_update { + local repo_name repo_dir casks_dir + + repo_name="${1}" + repo_dir="${caskroom_repos_dir}/${repo_name}" + casks_dir="${repo_dir}/Casks" + + if [[ ! -d "${repo_dir}" ]]; then + go_to_repos_dir + + message "Cloning ${repo_name}…" + git clone "https://github.com/caskroom/${repo_name}.git" --quiet + + cd "${casks_dir}" || exit 1 + else + cd "${casks_dir}" || exit 1 + + message "Updating ${repo_name}…" + git pull --rebase origin master --quiet + fi +} + +function fix_outdated_appcasts { + local issue_number cask_name pr_number + + for line in $(ghi list --state open --no-pulls --label 'outdated appcast' --reverse | tail +2); do + [[ "${line}" == 'None.' ]] && break # exit early if there are no relevant issues in repo + + issue_number="$(awk '{print $1}' <<< "${line}")" + cask_name="$(awk '{print $4}' <<< "${line}")" + + cask-repair --pull origin --push origin --open-appcast --closes-issue "${issue_number}" --blind-submit "${cask_name}" + + if [[ "$?" -eq 0 ]]; then + pr_number="$(ghi list --pulls --creator | sed -n 2p | awk '{print $1}')" + ghi edit --label 'outdated appcast' "${pr_number}" &>/dev/null + ghi comment --close --message "Closing in favour of #${pr_number}." "${issue_number}" &>/dev/null + fi + done +} + +for repo in "${caskroom_repos[@]}"; do + go_to_repo_and_update "${repo}" + fix_outdated_appcasts +done |
