From 958fee530ef169e8c37a04de447ee03c84ee5038 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 09:39:54 -0500 Subject: [PATCH 01/28] devscript: line-terminations, continuations --- developer/bin/develop_brew_cask | 26 +++++++++++++------------- developer/bin/get_release_tag | 26 +++++++++++++------------- developer/bin/list_apps_in_pkg | 10 +++++----- developer/bin/list_ids_in_pkg | 8 ++++---- developer/bin/list_loaded_kext_ids | 13 ++++++++----- developer/bin/list_recent_pkg_ids | 8 ++++---- developer/bin/production_brew_cask | 22 +++++++++++----------- developer/bin/project_stats | 16 ++++++++-------- 8 files changed, 66 insertions(+), 63 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 5d82071eaa..513e7b4934 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -3,9 +3,9 @@ # develop_brew_cask # -set -e; # exit on any uncaught error -set +o histexpand; # don't expand history expressions -shopt -s nocasematch; # case-insensitive regular expressions +set -e # exit on any uncaught error +set +o histexpand # don't expand history expressions +shopt -s nocasematch # case-insensitive regular expressions cd_to_project_root () { local script_dir="$(/usr/bin/dirname $0)" @@ -13,7 +13,7 @@ cd_to_project_root () { local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then printf "Could not find git project root" - exit 1; + exit 1 fi cd "$git_root" } @@ -22,8 +22,8 @@ cd_to_version_dir () { local cellar_dir="$1" local version_dir="$2" if [[ -z "$version_dir" ]]; then - printf "Can't get version dir under $cellar_dir/\n"; - exit 1; + printf "Can't get version dir under $cellar_dir/\n" + exit 1 fi cd "$cellar_dir/$version_dir" } @@ -48,7 +48,7 @@ _develop_brew_cask () { local tap_subdir="Library/Taps/phinze-cask" # initialization - cd_to_project_root; + cd_to_project_root local git_root="$(pwd)" local brew_prefix="$(brew --prefix)" local cellar_dir="$brew_prefix/Cellar/brew-cask" @@ -57,17 +57,17 @@ _develop_brew_cask () { # sanity check if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - printf "\nERROR: run this script in your private repo, not inside Homebrew.\n"; - exit 1; + printf "\nERROR: run this script in your private repo, not inside Homebrew.\n" + exit 1 fi # action - cd_to_version_dir "$cellar_dir" "$version_dir"; + cd_to_version_dir "$cellar_dir" "$version_dir" if [[ -e "production_rubylib" ]]; then - printf "brew-cask is already set up for development\n"; + printf "brew-cask is already set up for development\n" exit 1 else - create_dev_links "$git_root" "$tap_dir"; + create_dev_links "$git_root" "$tap_dir" printf "brew-cask is now in development mode\n" printf "Note: it is not safe to run 'brew update' while in development mode\n" fi @@ -92,6 +92,6 @@ mode is in effect. exit fi -_develop_brew_cask "$@"; +_develop_brew_cask "$@" # diff --git a/developer/bin/get_release_tag b/developer/bin/get_release_tag index da7ecd8086..75db48b175 100755 --- a/developer/bin/get_release_tag +++ b/developer/bin/get_release_tag @@ -3,16 +3,16 @@ # get_release_tag # -set -e; # exit on any uncaught error -set +o histexpand; # don't expand history expressions -shopt -s nocasematch; # case-insensitive regular expressions +set -e # exit on any uncaught error +set +o histexpand # don't expand history expressions +shopt -s nocasematch # case-insensitive regular expressions -opt_next=''; -opt_latest=''; -opt_verbose=''; +opt_next='' +opt_latest='' +opt_verbose='' die () { - local message="$@"; + local message="$@" if ! [[ $message =~ "\n"$ ]]; then message="${message}\n" fi @@ -71,7 +71,7 @@ generate_next_major_tag () { generate_next_minor_tag () { local -a version_elts - IFS='.' read -a version_elts <<< "$1"; + IFS='.' read -a version_elts <<< "$1" sanity_check_parsed_version "${version_elts[@]}" (( version_elts[1] += 1 )) # increment minor field version_elts[2]='0' # reset patch field @@ -123,12 +123,12 @@ See RELEASING.md for more information. fi elif [[ $arg =~ ^-+patch$ ]]; then if [[ "$opt_next" == 'major' ]]; then - die "Error: -patch is incompatible with -major"; + die "Error: -patch is incompatible with -major" fi opt_next='patch' elif [[ $arg =~ ^-+major$ ]]; then if [[ "$opt_next" == 'patch' ]]; then - die "Error: -patch is incompatible with -major"; + die "Error: -patch is incompatible with -major" fi opt_next='major' elif [[ $arg =~ ^-+latest$ ]]; then @@ -143,7 +143,7 @@ See RELEASING.md for more information. } _get_release_tag () { - cd_to_project_root; + cd_to_project_root local latest_tag="$(git describe --tags --abbrev=0 2>/dev/null)" if [[ -z "$latest_tag" ]]; then die "Error: no recent tag found" @@ -163,8 +163,8 @@ _get_release_tag () { fi } -process_args "$@"; +process_args "$@" -_get_release_tag; +_get_release_tag # diff --git a/developer/bin/list_apps_in_pkg b/developer/bin/list_apps_in_pkg index 2a1b863945..1fdac2ae84 100755 --- a/developer/bin/list_apps_in_pkg +++ b/developer/bin/list_apps_in_pkg @@ -3,9 +3,9 @@ # list_apps_in_pkg # -set -e; # exit on any uncaught error -set +o histexpand; # don't expand history expressions -shopt -s nocasematch; # case-insensitive regular expressions +set -e # exit on any uncaught error +set +o histexpand # don't expand history expressions +shopt -s nocasematch # case-insensitive regular expressions _list_apps_in_pkg () { @@ -22,7 +22,7 @@ _list_apps_in_pkg () { # source 2 /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ - 'while (m{ Date: Fri, 31 Jan 2014 09:41:53 -0500 Subject: [PATCH 02/28] devscript: full path to pwd --- developer/bin/develop_brew_cask | 2 +- developer/bin/production_brew_cask | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 513e7b4934..577a1178d5 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -49,7 +49,7 @@ _develop_brew_cask () { # initialization cd_to_project_root - local git_root="$(pwd)" + local git_root="$(/bin/pwd)" local brew_prefix="$(brew --prefix)" local cellar_dir="$brew_prefix/Cellar/brew-cask" local version_dir="$(/bin/ls "$cellar_dir/" | /usr/bin/sort | /usr/bin/tail -1)" diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 2f97386d93..60d722a1ae 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -46,7 +46,7 @@ _production_brew_cask () { # initialization cd_to_project_root - local git_root="$(pwd)" + local git_root="$(/bin/pwd)" local brew_prefix="$(brew --prefix)" local cellar_dir="$brew_prefix/Cellar/brew-cask" local version_dir="$(/bin/ls "$cellar_dir/" | /usr/bin/sort | /usr/bin/tail -1)" From 572eea7cbe20c971e1fb2c4a928dd76bef0d229e Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 09:44:13 -0500 Subject: [PATCH 03/28] devscript: avoid pattern match syntax use strict string equality --- developer/bin/project_stats | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index ae97e103c1..767e8e0d13 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -26,7 +26,7 @@ warn_if_off_branch () { if [[ -n "$1" ]]; then wanted_branch="$1" fi - if [[ "$branch" != "$wanted_branch" ]]; then + if ! [[ "$branch" = "$wanted_branch" ]]; then printf "\nWARNING: you are running from branch '$branch', not '$wanted_branch'\n\n" fi } @@ -60,7 +60,7 @@ _homebrew_cask_project_stats () { verify_git_object "$start_object" printf "Unique contributors" - if [[ "$start_object" != "$initial_commit" ]]; then + if ! [[ "$start_object" = "$initial_commit" ]]; then printf " since $start_object" fi printf "\n" @@ -75,7 +75,7 @@ _homebrew_cask_project_stats () { $git_log_cmd -- $doc_paths | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l printf " any\t" $git_log_cmd -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l - if [[ "$start_object" != "$initial_commit" ]]; then + if ! [[ "$start_object" = "$initial_commit" ]]; then local alltime_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${end_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" local prior_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${start_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" # arithmetic removes whitespace @@ -87,7 +87,7 @@ _homebrew_cask_project_stats () { printf "\n" - if [[ "$start_object" != "$initial_commit" ]]; then + if ! [[ "$start_object" = "$initial_commit" ]]; then local new_casks="$(git diff --name-status "$start_object" "$end_object" -- $cask_paths | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" local deleted_casks="$(git diff --name-status "$start_object" "$end_object" -- $cask_paths | /usr/bin/grep '^D.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" local updated_casks="$(git diff --name-status "$start_object" "$end_object" -- $cask_paths | /usr/bin/grep '^M.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" From 96eb76f67601f63e96e586512b9f28b50ef1c3a6 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 10:22:11 -0500 Subject: [PATCH 04/28] devscript: all large scripts use die/warn idiom --- developer/bin/develop_brew_cask | 25 +++++++++++++++++-------- developer/bin/get_release_tag | 6 +++++- developer/bin/production_brew_cask | 25 +++++++++++++++++-------- developer/bin/project_stats | 21 ++++++++++++++++----- 4 files changed, 55 insertions(+), 22 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 577a1178d5..be770fe387 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -7,13 +7,25 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +warn () { + local message="$@" + if ! [[ $message =~ "\n"$ ]]; then + message="${message}\n" + fi + printf "$message" 1>&2 +} + +die () { + warn "$@" + exit 1 +} + cd_to_project_root () { local script_dir="$(/usr/bin/dirname $0)" cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - printf "Could not find git project root" - exit 1 + die "Could not find git project root" fi cd "$git_root" } @@ -22,8 +34,7 @@ cd_to_version_dir () { local cellar_dir="$1" local version_dir="$2" if [[ -z "$version_dir" ]]; then - printf "Can't get version dir under $cellar_dir/\n" - exit 1 + die "Can't get version dir under $cellar_dir/" fi cd "$cellar_dir/$version_dir" } @@ -57,15 +68,13 @@ _develop_brew_cask () { # sanity check if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - printf "\nERROR: run this script in your private repo, not inside Homebrew.\n" - exit 1 + die "\nERROR: run this script in your private repo, not inside Homebrew." fi # action cd_to_version_dir "$cellar_dir" "$version_dir" if [[ -e "production_rubylib" ]]; then - printf "brew-cask is already set up for development\n" - exit 1 + die "brew-cask is already set up for development" else create_dev_links "$git_root" "$tap_dir" printf "brew-cask is now in development mode\n" diff --git a/developer/bin/get_release_tag b/developer/bin/get_release_tag index 75db48b175..dc03756b41 100755 --- a/developer/bin/get_release_tag +++ b/developer/bin/get_release_tag @@ -11,12 +11,16 @@ opt_next='' opt_latest='' opt_verbose='' -die () { +warn () { local message="$@" if ! [[ $message =~ "\n"$ ]]; then message="${message}\n" fi printf "$message" 1>&2 +} + +die () { + warn "$@" exit 1 } diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 60d722a1ae..12e16e0dc9 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -7,13 +7,25 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +warn () { + local message="$@" + if ! [[ $message =~ "\n"$ ]]; then + message="${message}\n" + fi + printf "$message" 1>&2 +} + +die () { + warn "$@" + exit 1 +} + cd_to_project_root () { local script_dir="$(/usr/bin/dirname $0)" cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - printf "Could not find git project root" - exit 1 + die "Could not find git project root" fi cd "$git_root" } @@ -22,8 +34,7 @@ cd_to_version_dir () { local cellar_dir="$1" local version_dir="$2" if [[ -z "$version_dir" ]]; then - printf "Can't get version dir under $cellar_dir/\n" - exit 1 + die "Can't get version dir under $cellar_dir/" fi cd "$cellar_dir/$version_dir" } @@ -54,8 +65,7 @@ _production_brew_cask () { # sanity check if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - printf "\nERROR: run this script in your private repo, not inside Homebrew.\n" - exit 1 + die "\nERROR: run this script in your private repo, not inside Homebrew." fi # action @@ -65,8 +75,7 @@ _production_brew_cask () { printf "brew-cask is now in production mode\n" printf "It is safe to run 'brew update'\n" else - printf "brew-cask is already set up for production\n" - exit 1 + die "brew-cask is already set up for production" fi } diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 767e8e0d13..5366422895 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -9,13 +9,25 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +warn () { + local message="$@" + if ! [[ $message =~ "\n"$ ]]; then + message="${message}\n" + fi + printf "$message" 1>&2 +} + +die () { + warn "$@" + exit 1 +} + cd_to_project_root () { local script_dir="$(/usr/bin/dirname $0)" cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - printf "Could not find git project root" - exit 1 + die "Could not find git project root" fi cd "$git_root" } @@ -27,14 +39,13 @@ warn_if_off_branch () { wanted_branch="$1" fi if ! [[ "$branch" = "$wanted_branch" ]]; then - printf "\nWARNING: you are running from branch '$branch', not '$wanted_branch'\n\n" + warn "\nWARNING: you are running from branch '$branch', not '$wanted_branch'\n\n" fi } verify_git_object () { if ! git rev-parse --verify "$1" > /dev/null 2>/dev/null; then - printf "\nERROR: No such commit object: $1\n\n" - exit 1 + die "\nERROR: No such commit object: $1" fi } From 73c891885fb8113e41cf256d6cc7cbe9d81c1610 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 10:27:07 -0500 Subject: [PATCH 05/28] devscript: error msg consistency --- developer/bin/develop_brew_cask | 6 +++--- developer/bin/get_release_tag | 20 ++++++++++---------- developer/bin/production_brew_cask | 6 +++--- developer/bin/project_stats | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index be770fe387..dc84eee44a 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -25,7 +25,7 @@ cd_to_project_root () { cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - die "Could not find git project root" + die "ERROR: Could not find git project root" fi cd "$git_root" } @@ -34,7 +34,7 @@ cd_to_version_dir () { local cellar_dir="$1" local version_dir="$2" if [[ -z "$version_dir" ]]; then - die "Can't get version dir under $cellar_dir/" + die "ERROR: Could not find version dir under $cellar_dir/" fi cd "$cellar_dir/$version_dir" } @@ -68,7 +68,7 @@ _develop_brew_cask () { # sanity check if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - die "\nERROR: run this script in your private repo, not inside Homebrew." + die "\nERROR: Run this script in your private repo, not inside Homebrew." fi # action diff --git a/developer/bin/get_release_tag b/developer/bin/get_release_tag index dc03756b41..d3877699b0 100755 --- a/developer/bin/get_release_tag +++ b/developer/bin/get_release_tag @@ -29,23 +29,23 @@ cd_to_project_root () { cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - die "Could not find git project root" + die "ERROR: Could not find git project root" fi cd "$git_root" } verify_git_object_is_new () { if git rev-parse --verify "$1" >/dev/null 2>&1; then - die "\nERROR: proposed new tag: '$1' already exists as a commit object\n\n" + die "\nERROR: Proposed new tag: '$1' already exists as a commit object\n\n" fi } sanity_check_parsed_version () { if [[ $# -ne 3 ]]; then - die "Error: can't parse version tag, wrong number of elements" + die "ERROR: Could not parse version tag: wrong number of elements" fi if ! [[ $1 =~ ^v[0-9]+$ ]]; then - die "Error: can't parse version tag, does not start with v[0-9]" + die "ERROR: Could not parse version tag: does not start with v[0-9]" fi } @@ -127,21 +127,21 @@ See RELEASING.md for more information. fi elif [[ $arg =~ ^-+patch$ ]]; then if [[ "$opt_next" == 'major' ]]; then - die "Error: -patch is incompatible with -major" + die "ERROR: -patch is incompatible with -major" fi opt_next='patch' elif [[ $arg =~ ^-+major$ ]]; then if [[ "$opt_next" == 'patch' ]]; then - die "Error: -patch is incompatible with -major" + die "ERROR: -patch is incompatible with -major" fi opt_next='major' elif [[ $arg =~ ^-+latest$ ]]; then opt_latest='true' else - die "Error: unknown argument '$arg'" + die "ERROR: Unknown argument '$arg'" fi if [[ -n "$opt_latest" && -n "$opt_next" ]]; then - die "Error: -latest is incompatible with -next/-patch/-major" + die "ERROR: -latest is incompatible with -next/-patch/-major" fi done } @@ -150,7 +150,7 @@ _get_release_tag () { cd_to_project_root local latest_tag="$(git describe --tags --abbrev=0 2>/dev/null)" if [[ -z "$latest_tag" ]]; then - die "Error: no recent tag found" + die "ERROR: No recent tag found" elif [[ -z "$opt_next" ]]; then if [[ -n "$opt_verbose" ]]; then printf "Latest tag\t" @@ -163,7 +163,7 @@ _get_release_tag () { elif [[ "$opt_next" == 'patch' ]]; then generate_next_patch_tag "$latest_tag" else - die "Error: should not happen. Unknown argument?" + die "ERROR: Should not happen. Unknown argument?" fi } diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 12e16e0dc9..1af4e25c9d 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -25,7 +25,7 @@ cd_to_project_root () { cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - die "Could not find git project root" + die "ERROR: Could not find git project root" fi cd "$git_root" } @@ -34,7 +34,7 @@ cd_to_version_dir () { local cellar_dir="$1" local version_dir="$2" if [[ -z "$version_dir" ]]; then - die "Can't get version dir under $cellar_dir/" + die "ERROR: Could not find version dir under $cellar_dir/" fi cd "$cellar_dir/$version_dir" } @@ -65,7 +65,7 @@ _production_brew_cask () { # sanity check if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - die "\nERROR: run this script in your private repo, not inside Homebrew." + die "\nERROR: Run this script in your private repo, not inside Homebrew." fi # action diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 5366422895..3db8d188fb 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -27,7 +27,7 @@ cd_to_project_root () { cd "$script_dir" local git_root="$(git rev-parse --show-toplevel)" if [[ -z "$git_root" ]]; then - die "Could not find git project root" + die "ERROR: Could not find git project root" fi cd "$git_root" } From bc650b8079b8f5f49afc4fa3749fca4840f1d6f5 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 10:36:27 -0500 Subject: [PATCH 06/28] devscript: quote/expansion nit for clarity. I think this is special-cased anyway --- developer/bin/develop_brew_cask | 2 +- developer/bin/get_release_tag | 2 +- developer/bin/list_apps_in_pkg | 2 +- developer/bin/list_ids_in_pkg | 2 +- developer/bin/list_loaded_kext_ids | 2 +- developer/bin/list_recent_pkg_ids | 2 +- developer/bin/production_brew_cask | 2 +- developer/bin/project_stats | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index dc84eee44a..def869e986 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -101,6 +101,6 @@ mode is in effect. exit fi -_develop_brew_cask "$@" +_develop_brew_cask "${@}" # diff --git a/developer/bin/get_release_tag b/developer/bin/get_release_tag index d3877699b0..d69c38a07b 100755 --- a/developer/bin/get_release_tag +++ b/developer/bin/get_release_tag @@ -167,7 +167,7 @@ _get_release_tag () { fi } -process_args "$@" +process_args "${@}" _get_release_tag diff --git a/developer/bin/list_apps_in_pkg b/developer/bin/list_apps_in_pkg index 1fdac2ae84..6fcac295ba 100755 --- a/developer/bin/list_apps_in_pkg +++ b/developer/bin/list_apps_in_pkg @@ -59,6 +59,6 @@ See CONTRIBUTING.md and 'man pkgutil' for more information. exit fi -_list_apps_in_pkg "$@" +_list_apps_in_pkg "${@}" # diff --git a/developer/bin/list_ids_in_pkg b/developer/bin/list_ids_in_pkg index a3c068b58e..01afc94d9b 100755 --- a/developer/bin/list_ids_in_pkg +++ b/developer/bin/list_ids_in_pkg @@ -55,6 +55,6 @@ See CONTRIBUTING.md and 'man pkgutil' for more information. exit fi -_list_ids_in_pkg "$@" +_list_ids_in_pkg "${@}" # diff --git a/developer/bin/list_loaded_kext_ids b/developer/bin/list_loaded_kext_ids index 66977740e0..17e8e44f83 100755 --- a/developer/bin/list_loaded_kext_ids +++ b/developer/bin/list_loaded_kext_ids @@ -30,6 +30,6 @@ See CONTRIBUTING.md for more information. exit fi -_list_loaded_kext_ids "$@" +_list_loaded_kext_ids "${@}" # diff --git a/developer/bin/list_recent_pkg_ids b/developer/bin/list_recent_pkg_ids index fcf60254a8..281d9b6b48 100755 --- a/developer/bin/list_recent_pkg_ids +++ b/developer/bin/list_recent_pkg_ids @@ -31,6 +31,6 @@ See CONTRIBUTING.md for more information. exit fi -_list_recent_pkg_ids "$@" +_list_recent_pkg_ids "${@}" # diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 1af4e25c9d..1fca9b0f3b 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -93,6 +93,6 @@ After running this command it is safe to run 'brew update'. exit fi -_production_brew_cask "$@" +_production_brew_cask "${@}" # diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 3db8d188fb..0dc9d4f118 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -130,6 +130,6 @@ Without argument, show statistics since first commit. exit fi -_homebrew_cask_project_stats "$@" +_homebrew_cask_project_stats "${@}" # From e7cdc72ff67548ad7bf0d0dc44370fafccc8e438 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 10:37:52 -0500 Subject: [PATCH 07/28] devscript: factor list_apps_in_pkg into functions no functional change --- developer/bin/list_apps_in_pkg | 53 ++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/developer/bin/list_apps_in_pkg b/developer/bin/list_apps_in_pkg index 6fcac295ba..b27e38f022 100755 --- a/developer/bin/list_apps_in_pkg +++ b/developer/bin/list_apps_in_pkg @@ -7,6 +7,33 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +app_source_1 () { + /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ + /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ + 'while (m{ Date: Fri, 31 Jan 2014 11:01:35 -0500 Subject: [PATCH 08/28] devscript: add optional src to list_apps_in_pkg --- developer/bin/list_apps_in_pkg | 97 ++++++++++++++++++++++++++-------- 1 file changed, 74 insertions(+), 23 deletions(-) diff --git a/developer/bin/list_apps_in_pkg b/developer/bin/list_apps_in_pkg index b27e38f022..a0953da800 100755 --- a/developer/bin/list_apps_in_pkg +++ b/developer/bin/list_apps_in_pkg @@ -7,6 +7,22 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +opt_lax='' +opt_pkg='' + +warn () { + local message="$@" + if ! [[ $message =~ "\n"$ ]]; then + message="${message}\n" + fi + printf "$message" 1>&2 +} + +die () { + warn "$@" + exit 1 +} + app_source_1 () { /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ @@ -24,6 +40,12 @@ app_source_3 () { perl -pe 's{\A.*/}{}'; } +app_source_4 () { + /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ + /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ + 'while (m{path\s*=\s*"([^"]+\.app)"}sg) { my $p = $1; $p =~ s{\A.*/}{}; print "$p\n" }'; +} + merge_sources () { /usr/bin/sort | /usr/bin/uniq } @@ -34,25 +56,16 @@ mark_up_sources () { 'printf "{}"; /bin/test -n "$(/usr/bin/find /Applications -type d -maxdepth 3 -name "{}" -print0; /usr/bin/find ~/Applications -type d -maxdepth 3 -name "{}")" && printf " (+)"; printf "\n"' } -_list_apps_in_pkg () { - - local tmpdir=`/usr/bin/mktemp -d -t list_apps_in_pkg` - trap "/bin/rm -rf '$tmpdir'" EXIT - - /usr/sbin/pkgutil --expand "$1" "$tmpdir/unpack" - - { - # strings that look like appnames (Something.app) - app_source_1; - app_source_2; - app_source_3; - } | \ - merge_sources | \ - mark_up_sources -} - -if [[ $1 =~ ^-+h(elp)?$ || -z "$1" ]]; then - printf "list_apps_in_pkg +process_args () { + local arg + if [[ "$#" -eq 0 ]]; then + die "ERROR: A file argument is required" + else + opt_pkg="${!#}" # last arg + fi + for arg in "$@"; do + if [[ $arg =~ ^-+h(elp)?$ ]]; then + printf "list_apps_in_pkg [ -lax ] Given a package file, extract a list of candidate App names from inside the pkg, which may be useful for naming a Cask. @@ -63,7 +76,12 @@ If an App of the listed name is already installed in /Applications or ~/Applications, it will be followed by a plus symbol '(+)' in the output. This can be verified via 'ls' or the Finder. -This script is imperfect. +Arguments + + -lax Be less selective in looking for App names. Generate + more, but less accurate, guesses. + +Bugs: This script is imperfect. - It does not fully parse PackageInfo files - An App can be hidden within a nested archive and not found - Some pkg files simply don't contain any Apps @@ -71,9 +89,42 @@ This script is imperfect. See CONTRIBUTING.md and 'man pkgutil' for more information. " - exit -fi + exit + elif [[ $arg =~ ^-+lax$ ]]; then + opt_lax='true' + elif [[ "$arg" = "$opt_pkg" ]]; then + opt_latest='true' + else + die "ERROR: Unknown argument '$arg'" + fi + done + if ! [[ -e "$opt_pkg" ]]; then + die "ERROR: No such pkg file: '$opt_pkg'" + fi +} -_list_apps_in_pkg "${@}" +_list_apps_in_pkg () { + + local tmpdir=`/usr/bin/mktemp -d -t list_apps_in_pkg` + trap "/bin/rm -rf '$tmpdir'" EXIT + + /usr/sbin/pkgutil --expand "$opt_pkg" "$tmpdir/unpack" + + { + # strings that look like appnames (Something.app) + app_source_1; + app_source_2; + app_source_3; + if [[ -n "$opt_lax" ]]; then + app_source_4; + fi + } | \ + merge_sources | \ + mark_up_sources +} + +process_args "${@}" + +_list_apps_in_pkg # From bffec0e719db667efd1b793f8d977b6dfddcde25 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:04:25 -0500 Subject: [PATCH 09/28] devscript: refactor list_ids_in_pkg into functions --- developer/bin/list_ids_in_pkg | 37 ++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/developer/bin/list_ids_in_pkg b/developer/bin/list_ids_in_pkg index 01afc94d9b..c7e4e97413 100755 --- a/developer/bin/list_ids_in_pkg +++ b/developer/bin/list_ids_in_pkg @@ -7,6 +7,27 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +bundle_id_source_1 () { + /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ + /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ + 'while (m{/dev/null 2>&1 && printf " (+)"; printf "\n"' +} + _list_ids_in_pkg () { local tmpdir=`/usr/bin/mktemp -d -t list_ids_in_pkg` @@ -14,15 +35,13 @@ _list_ids_in_pkg () { /usr/sbin/pkgutil --expand "$1" "$tmpdir/unpack" - /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ - /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ - 'while (m{/dev/null 2>&1 && printf " (+)"; printf "\n"' + { + # emit strings that look like bundle ids + bundle_id_source_1; + } | \ + merge_sources | \ + clean_sources | \ + mark_up_sources } From 26d4f804d8cd1dc194d79fef925a945beb552223 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:05:29 -0500 Subject: [PATCH 10/28] devscript: hoist $tmpdir to make clear it is shared between functions --- developer/bin/list_apps_in_pkg | 3 ++- developer/bin/list_ids_in_pkg | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/developer/bin/list_apps_in_pkg b/developer/bin/list_apps_in_pkg index a0953da800..4e7e536d6d 100755 --- a/developer/bin/list_apps_in_pkg +++ b/developer/bin/list_apps_in_pkg @@ -9,6 +9,7 @@ shopt -s nocasematch # case-insensitive regular expressions opt_lax='' opt_pkg='' +tmpdir='' warn () { local message="$@" @@ -105,7 +106,7 @@ See CONTRIBUTING.md and 'man pkgutil' for more information. _list_apps_in_pkg () { - local tmpdir=`/usr/bin/mktemp -d -t list_apps_in_pkg` + tmpdir=`/usr/bin/mktemp -d -t list_apps_in_pkg` trap "/bin/rm -rf '$tmpdir'" EXIT /usr/sbin/pkgutil --expand "$opt_pkg" "$tmpdir/unpack" diff --git a/developer/bin/list_ids_in_pkg b/developer/bin/list_ids_in_pkg index c7e4e97413..292d942658 100755 --- a/developer/bin/list_ids_in_pkg +++ b/developer/bin/list_ids_in_pkg @@ -7,6 +7,8 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +tmpdir='' + bundle_id_source_1 () { /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ @@ -30,7 +32,7 @@ mark_up_sources () { _list_ids_in_pkg () { - local tmpdir=`/usr/bin/mktemp -d -t list_ids_in_pkg` + tmpdir=`/usr/bin/mktemp -d -t list_ids_in_pkg` trap "/bin/rm -rf '$tmpdir'" EXIT /usr/sbin/pkgutil --expand "$1" "$tmpdir/unpack" From bf19f020d6ea055a422bf0ee633c4f20dd4b2b03 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:19:47 -0500 Subject: [PATCH 11/28] devscript: comments --- developer/bin/develop_brew_cask | 14 ++++++++++++++ developer/bin/get_release_tag | 17 +++++++++++++++++ developer/bin/list_apps_in_pkg | 19 ++++++++++++++++++- developer/bin/list_ids_in_pkg | 18 ++++++++++++++++++ developer/bin/list_loaded_kext_ids | 10 ++++++++++ developer/bin/list_recent_pkg_ids | 10 ++++++++++ developer/bin/production_brew_cask | 14 ++++++++++++++ developer/bin/project_stats | 14 ++++++++++++++ 8 files changed, 115 insertions(+), 1 deletion(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index def869e986..103564a2bd 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -3,10 +3,18 @@ # develop_brew_cask # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### functions +### + warn () { local message="$@" if ! [[ $message =~ "\n"$ ]]; then @@ -53,6 +61,10 @@ create_dev_links () { /bin/ln -s "$git_root/lib" . } +### +### main +### + _develop_brew_cask () { # configurable @@ -83,6 +95,7 @@ _develop_brew_cask () { } +# process args if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "develop_brew_cask @@ -101,6 +114,7 @@ mode is in effect. exit fi +# dispatch main _develop_brew_cask "${@}" # diff --git a/developer/bin/get_release_tag b/developer/bin/get_release_tag index d69c38a07b..d7932f78cc 100755 --- a/developer/bin/get_release_tag +++ b/developer/bin/get_release_tag @@ -3,14 +3,26 @@ # get_release_tag # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### global variables +### + opt_next='' opt_latest='' opt_verbose='' +### +### functions +### + warn () { local message="$@" if ! [[ $message =~ "\n"$ ]]; then @@ -146,6 +158,10 @@ See RELEASING.md for more information. done } +### +### main +### + _get_release_tag () { cd_to_project_root local latest_tag="$(git describe --tags --abbrev=0 2>/dev/null)" @@ -169,6 +185,7 @@ _get_release_tag () { process_args "${@}" +# dispatch main _get_release_tag # diff --git a/developer/bin/list_apps_in_pkg b/developer/bin/list_apps_in_pkg index 4e7e536d6d..4d5ece1f73 100755 --- a/developer/bin/list_apps_in_pkg +++ b/developer/bin/list_apps_in_pkg @@ -3,14 +3,26 @@ # list_apps_in_pkg # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### global variables +### + opt_lax='' opt_pkg='' tmpdir='' +### +### functions +### + warn () { local message="$@" if ! [[ $message =~ "\n"$ ]]; then @@ -104,6 +116,10 @@ See CONTRIBUTING.md and 'man pkgutil' for more information. fi } +### +### main +### + _list_apps_in_pkg () { tmpdir=`/usr/bin/mktemp -d -t list_apps_in_pkg` @@ -112,7 +128,7 @@ _list_apps_in_pkg () { /usr/sbin/pkgutil --expand "$opt_pkg" "$tmpdir/unpack" { - # strings that look like appnames (Something.app) + # strings that look like App names (Something.app) app_source_1; app_source_2; app_source_3; @@ -126,6 +142,7 @@ _list_apps_in_pkg () { process_args "${@}" +# dispatch main _list_apps_in_pkg # diff --git a/developer/bin/list_ids_in_pkg b/developer/bin/list_ids_in_pkg index 292d942658..a7a2fff687 100755 --- a/developer/bin/list_ids_in_pkg +++ b/developer/bin/list_ids_in_pkg @@ -3,12 +3,24 @@ # list_ids_in_pkg # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### global variables +### + tmpdir='' +### +### functions +### + bundle_id_source_1 () { /usr/bin/find "$tmpdir" -name PackageInfo -print0 | \ /usr/bin/xargs -0 /usr/bin/perl -0777 -ne \ @@ -30,6 +42,10 @@ mark_up_sources () { 'printf "{}"; /usr/sbin/pkgutil --pkg-info "{}" >/dev/null 2>&1 && printf " (+)"; printf "\n"' } +### +### main +### + _list_ids_in_pkg () { tmpdir=`/usr/bin/mktemp -d -t list_ids_in_pkg` @@ -47,6 +63,7 @@ _list_ids_in_pkg () { } +# process args if [[ $1 =~ ^-+h(elp)?$ || -z "$1" ]]; then printf "list_ids_in_pkg @@ -76,6 +93,7 @@ See CONTRIBUTING.md and 'man pkgutil' for more information. exit fi +# dispatch main _list_ids_in_pkg "${@}" # diff --git a/developer/bin/list_loaded_kext_ids b/developer/bin/list_loaded_kext_ids index 17e8e44f83..caca550368 100755 --- a/developer/bin/list_loaded_kext_ids +++ b/developer/bin/list_loaded_kext_ids @@ -3,10 +3,18 @@ # list_loaded_kext_ids # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### main +### + _list_loaded_kext_ids () { /usr/sbin/kextstat -kl | \ /usr/bin/cut -c53- | \ @@ -14,6 +22,7 @@ _list_loaded_kext_ids () { /usr/bin/egrep -v '^com\.apple\.' } +# process args if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "list_loaded_kext_ids @@ -30,6 +39,7 @@ See CONTRIBUTING.md for more information. exit fi +# dispatch main _list_loaded_kext_ids "${@}" # diff --git a/developer/bin/list_recent_pkg_ids b/developer/bin/list_recent_pkg_ids index 281d9b6b48..e2c16af3a3 100755 --- a/developer/bin/list_recent_pkg_ids +++ b/developer/bin/list_recent_pkg_ids @@ -3,10 +3,18 @@ # list_recent_pkg_ids # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### main +### + _list_recent_pkg_ids () { /bin/ls -t /var/db/receipts | \ /usr/bin/egrep '\.plist$' | \ @@ -15,6 +23,7 @@ _list_recent_pkg_ids () { /usr/bin/head -10 } +# process args if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "list_recent_pkg_ids @@ -31,6 +40,7 @@ See CONTRIBUTING.md for more information. exit fi +# dispatch main _list_recent_pkg_ids "${@}" # diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 1fca9b0f3b..ba762686d7 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -3,10 +3,18 @@ # production_brew_cask # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### functions +### + warn () { local message="$@" if ! [[ $message =~ "\n"$ ]]; then @@ -50,6 +58,10 @@ remove_dev_links () { /bin/mv production_Casks Casks } +### +### main +### + _production_brew_cask () { # configurable @@ -80,6 +92,7 @@ _production_brew_cask () { } +# process args if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "production_brew_cask @@ -93,6 +106,7 @@ After running this command it is safe to run 'brew update'. exit fi +# dispatch main _production_brew_cask "${@}" # diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 0dc9d4f118..6e96ee91c0 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -5,10 +5,18 @@ # stats on project/release from git database # +### +### settings +### + set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### functions +### + warn () { local message="$@" if ! [[ $message =~ "\n"$ ]]; then @@ -49,6 +57,10 @@ verify_git_object () { fi } +### +### main +### + _homebrew_cask_project_stats () { local initial_commit="5a0d1d5556e3f963a0d34da46e16ecffa59ea2fc" @@ -115,6 +127,7 @@ _homebrew_cask_project_stats () { } +# process args if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "project_stats [ ] @@ -130,6 +143,7 @@ Without argument, show statistics since first commit. exit fi +# dispatch main _homebrew_cask_project_stats "${@}" # From 73e15095f634a800e29a26ffb9a83221ef33ae4c Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:21:25 -0500 Subject: [PATCH 12/28] devscript: rename func to match script name --- developer/bin/project_stats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 6e96ee91c0..0cd7ed7296 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -61,7 +61,7 @@ verify_git_object () { ### main ### -_homebrew_cask_project_stats () { +_project_stats () { local initial_commit="5a0d1d5556e3f963a0d34da46e16ecffa59ea2fc" local start_object="$initial_commit" @@ -144,6 +144,6 @@ Without argument, show statistics since first commit. fi # dispatch main -_homebrew_cask_project_stats "${@}" +_project_stats "${@}" # From abe29d1b51115505b2bfb1e8daae78cf41d5f8f6 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:28:48 -0500 Subject: [PATCH 13/28] devscript: hoist configurable global variables --- developer/bin/develop_brew_cask | 9 ++++++--- developer/bin/production_brew_cask | 9 ++++++--- developer/bin/project_stats | 18 +++++++++++------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 103564a2bd..1072d56d6c 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -11,6 +11,12 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### configurable global variables +### + +tap_subdir="Library/Taps/phinze-cask" + ### ### functions ### @@ -67,9 +73,6 @@ create_dev_links () { _develop_brew_cask () { - # configurable - local tap_subdir="Library/Taps/phinze-cask" - # initialization cd_to_project_root local git_root="$(/bin/pwd)" diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index ba762686d7..4780da74ef 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -11,6 +11,12 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### configurable global variables +### + +tap_subdir="Library/Taps/phinze-cask" + ### ### functions ### @@ -64,9 +70,6 @@ remove_dev_links () { _production_brew_cask () { - # configurable - local tap_subdir="Library/Taps/phinze-cask" - # initialization cd_to_project_root local git_root="$(/bin/pwd)" diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 0cd7ed7296..02ca55ac4c 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -13,6 +13,17 @@ set -e # exit on any uncaught error set +o histexpand # don't expand history expressions shopt -s nocasematch # case-insensitive regular expressions +### +### configurable global variables +### + +# these paths relative to project root +cask_paths="Casks" +code_paths="bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock" +doc_paths="LICENSE *.md" +initial_commit="5a0d1d5556e3f963a0d34da46e16ecffa59ea2fc" +end_object="HEAD" + ### ### functions ### @@ -63,14 +74,7 @@ verify_git_object () { _project_stats () { - local initial_commit="5a0d1d5556e3f963a0d34da46e16ecffa59ea2fc" local start_object="$initial_commit" - local end_object="HEAD" - - # these paths relative to project root - local cask_paths="Casks" - local code_paths="bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock" - local doc_paths="LICENSE *.md" cd_to_project_root warn_if_off_branch 'master' From bf24e32ea0ce5d4a5d2b15763635f84d176f73d2 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:37:00 -0500 Subject: [PATCH 14/28] devscript: factor out not_inside_homebrew sanity check --- developer/bin/develop_brew_cask | 12 +++++++++--- developer/bin/production_brew_cask | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 1072d56d6c..78c40ee327 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -53,6 +53,14 @@ cd_to_version_dir () { cd "$cellar_dir/$version_dir" } +not_inside_homebrew () { + local tap_dir="$1" + local git_root="$2" + if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then + die "\nERROR: Run this script in your private repo, not inside Homebrew.\n" + fi +} + create_dev_links () { local git_root="$1" local tap_dir="$2" @@ -82,9 +90,7 @@ _develop_brew_cask () { local tap_dir="$brew_prefix/$tap_subdir" # sanity check - if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - die "\nERROR: Run this script in your private repo, not inside Homebrew." - fi + not_inside_homebrew "$tap_dir" "$git_root" # action cd_to_version_dir "$cellar_dir" "$version_dir" diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 4780da74ef..cfad57e189 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -53,6 +53,14 @@ cd_to_version_dir () { cd "$cellar_dir/$version_dir" } +not_inside_homebrew () { + local tap_dir="$1" + local git_root="$2" + if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then + die "\nERROR: Run this script in your private repo, not inside Homebrew.\n" + fi +} + remove_dev_links () { local tap_dir="$1" /bin/rm rubylib Casks @@ -79,9 +87,7 @@ _production_brew_cask () { local tap_dir="$brew_prefix/$tap_subdir" # sanity check - if [[ "$(/usr/bin/stat -L -f '%i' "$tap_dir")" -eq "$(/usr/bin/stat -L -f '%i' "$git_root")" ]]; then - die "\nERROR: Run this script in your private repo, not inside Homebrew." - fi + not_inside_homebrew "$tap_dir" "$git_root" # action cd_to_version_dir "$cellar_dir" "$version_dir" From f26e0fb1e9725f63bdc7c409199a5335ab5ea03c Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:39:31 -0500 Subject: [PATCH 15/28] devscript: re-order params for least surprise --- developer/bin/develop_brew_cask | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 78c40ee327..ada7c05de7 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -62,8 +62,8 @@ not_inside_homebrew () { } create_dev_links () { - local git_root="$1" - local tap_dir="$2" + local tap_dir="$1" + local git_root="$2" /bin/mv rubylib production_rubylib /bin/mv Casks production_Casks /bin/ln -s "$git_root/Casks" . @@ -97,7 +97,7 @@ _develop_brew_cask () { if [[ -e "production_rubylib" ]]; then die "brew-cask is already set up for development" else - create_dev_links "$git_root" "$tap_dir" + create_dev_links "$tap_dir" "$git_root" printf "brew-cask is now in development mode\n" printf "Note: it is not safe to run 'brew update' while in development mode\n" fi From da16653e54447bac86590a6489055855e43851c1 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:47:40 -0500 Subject: [PATCH 16/28] devscript: move feedback msgs inside functions --- developer/bin/develop_brew_cask | 4 ++-- developer/bin/production_brew_cask | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index ada7c05de7..1a2f6f5180 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -73,6 +73,8 @@ create_dev_links () { /bin/mv Casks production_Casks /bin/ln -s "$git_root/Casks" . /bin/ln -s "$git_root/lib" . + printf "brew-cask is now in development mode\n" + printf "Note: it is not safe to run 'brew update' while in development mode\n" } ### @@ -98,8 +100,6 @@ _develop_brew_cask () { die "brew-cask is already set up for development" else create_dev_links "$tap_dir" "$git_root" - printf "brew-cask is now in development mode\n" - printf "Note: it is not safe to run 'brew update' while in development mode\n" fi } diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index cfad57e189..6bc8bf4896 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -70,6 +70,8 @@ remove_dev_links () { /bin/rm lib Casks /bin/mv production_lib lib /bin/mv production_Casks Casks + printf "brew-cask is now in production mode\n" + printf "It is safe to run 'brew update'\n" } ### @@ -93,8 +95,6 @@ _production_brew_cask () { cd_to_version_dir "$cellar_dir" "$version_dir" if [[ -e "production_rubylib" ]]; then remove_dev_links "$tap_dir" - printf "brew-cask is now in production mode\n" - printf "It is safe to run 'brew update'\n" else die "brew-cask is already set up for production" fi From 47377071f2928aa03449521129af7f45300bd9ca Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:50:49 -0500 Subject: [PATCH 17/28] devscript: docs --- developer/bin/develop_brew_cask | 4 ++-- developer/bin/production_brew_cask | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/developer/bin/develop_brew_cask b/developer/bin/develop_brew_cask index 1a2f6f5180..d7123abd61 100755 --- a/developer/bin/develop_brew_cask +++ b/developer/bin/develop_brew_cask @@ -109,8 +109,8 @@ if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "develop_brew_cask Symlink private repo directories into Homebrew's Cellar, so -that the 'brew cask' command will use the current development -branch in your private repo. +that the 'brew cask' command will use code and Casks from +the current development branch in your private repo. Saves the production Homebrew directories under new names. diff --git a/developer/bin/production_brew_cask b/developer/bin/production_brew_cask index 6bc8bf4896..e0c3fbebdd 100755 --- a/developer/bin/production_brew_cask +++ b/developer/bin/production_brew_cask @@ -71,7 +71,7 @@ remove_dev_links () { /bin/mv production_lib lib /bin/mv production_Casks Casks printf "brew-cask is now in production mode\n" - printf "It is safe to run 'brew update'\n" + printf "It is safe to run 'brew update' if you are in production mode for all Caskroom repos.\n" } ### @@ -105,11 +105,13 @@ _production_brew_cask () { if [[ $1 =~ ^-+h(elp)?$ ]]; then printf "production_brew_cask -Undo all symlinks created by 'develop_brew_cask' so that -the 'brew cask' command will use only released code within -Homebrew. +Undo all symlinks created by 'develop_brew_cask' so that the +'brew cask' command will use only released code and Casks +within Homebrew. -After running this command it is safe to run 'brew update'. +After running this command it is safe to run 'brew update', +unless you are using similar scripts to create symlinks into +other Caskroom development repos. " exit From 3ce5f462d871eac3703848292a397bc3a9c91310 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:53:47 -0500 Subject: [PATCH 18/28] devscript: improve warn_if_off_branch --- developer/bin/project_stats | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 02ca55ac4c..80234b6fd5 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -52,13 +52,14 @@ cd_to_project_root () { } warn_if_off_branch () { - local branch="$(git rev-parse --abbrev-ref HEAD)" local wanted_branch='master' if [[ -n "$1" ]]; then wanted_branch="$1" fi - if ! [[ "$branch" = "$wanted_branch" ]]; then - warn "\nWARNING: you are running from branch '$branch', not '$wanted_branch'\n\n" + + local current_branch="$(git rev-parse --abbrev-ref HEAD)" + if ! [[ "$current_branch" = "$wanted_branch" ]]; then + warn "\nWARNING: you are running from branch '$current_branch', not '$wanted_branch'\n\n" fi } From 7638cf2b32f3a49b5250b0ea104b793c1affa607 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:54:53 -0500 Subject: [PATCH 19/28] devscript: improve verify_git_object --- developer/bin/project_stats | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 80234b6fd5..f0b9aa4300 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -64,8 +64,10 @@ warn_if_off_branch () { } verify_git_object () { - if ! git rev-parse --verify "$1" > /dev/null 2>/dev/null; then - die "\nERROR: No such commit object: $1" + local object="$1" + + if ! git rev-parse --verify "$object" -- >/dev/null 2>&1; then + die "\nERROR: No such commit object: '$object'\n\n" fi } From 1e3018964fad779e35e428790b3f307d046f071d Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 11:58:00 -0500 Subject: [PATCH 20/28] devscript: clarify $1 in main func --- developer/bin/project_stats | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index f0b9aa4300..0f4d106686 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -76,16 +76,17 @@ verify_git_object () { ### _project_stats () { + local arg_object="$1" local start_object="$initial_commit" cd_to_project_root warn_if_off_branch 'master' - if [[ "$1" = 'release' ]]; then + if [[ "$arg_object" = 'release' ]]; then start_object="$(git describe --tags --abbrev=0)" - elif [[ -n "$1" ]]; then - start_object="$1" + elif [[ -n "$arg_object" ]]; then + start_object="$arg_object" fi verify_git_object "$start_object" From ac3b058ee7bc2dd264710980d0f4c2172c70c744 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:00:33 -0500 Subject: [PATCH 21/28] devscript: find initial_commit from git log --- developer/bin/project_stats | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 0f4d106686..57ff061c5e 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -21,7 +21,6 @@ shopt -s nocasematch # case-insensitive regular expressions cask_paths="Casks" code_paths="bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock" doc_paths="LICENSE *.md" -initial_commit="5a0d1d5556e3f963a0d34da46e16ecffa59ea2fc" end_object="HEAD" ### @@ -78,11 +77,13 @@ verify_git_object () { _project_stats () { local arg_object="$1" - local start_object="$initial_commit" - cd_to_project_root warn_if_off_branch 'master' + local initial_commit="$(git log --pretty=format:%H -- | /usr/bin/tail -1)" + verify_git_object "$initial_commit" + local start_object="$initial_commit" + if [[ "$arg_object" = 'release' ]]; then start_object="$(git describe --tags --abbrev=0)" elif [[ -n "$arg_object" ]]; then From 05170ddb90106d64a7aba713c4ed008d044a43ec Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:01:51 -0500 Subject: [PATCH 22/28] devscript: re-use get_release_tag script --- developer/bin/project_stats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 57ff061c5e..a81296fdd0 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -85,7 +85,7 @@ _project_stats () { local start_object="$initial_commit" if [[ "$arg_object" = 'release' ]]; then - start_object="$(git describe --tags --abbrev=0)" + start_object="$(./developer/bin/get_release_tag)" elif [[ -n "$arg_object" ]]; then start_object="$arg_object" fi From 9c042a99050e32cdae2a8454aedbb6d4855f7e9d Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:06:29 -0500 Subject: [PATCH 23/28] devscript: switch to array vars for file lists with proper quoting --- developer/bin/project_stats | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index a81296fdd0..2f303638f5 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -18,9 +18,9 @@ shopt -s nocasematch # case-insensitive regular expressions ### # these paths relative to project root -cask_paths="Casks" -code_paths="bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock" -doc_paths="LICENSE *.md" +declare -a cask_paths=(Casks) +declare -a code_paths=(bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock) +declare -a doc_paths=(LICENSE "*.md") end_object="HEAD" ### @@ -99,12 +99,12 @@ _project_stats () { local git_log_cmd="git log --no-merges --format='%ae' ${start_object}..${end_object}" - local cask_authors="$($git_log_cmd -- $cask_paths | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local cask_authors="$($git_log_cmd -- "${cask_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" printf " Casks\t$cask_authors\n" printf " code\t" - $git_log_cmd -- $code_paths | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l + $git_log_cmd -- "${code_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l printf " docs\t" - $git_log_cmd -- $doc_paths | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l + $git_log_cmd -- "${doc_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l printf " any\t" $git_log_cmd -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l if ! [[ "$start_object" = "$initial_commit" ]]; then @@ -120,9 +120,9 @@ _project_stats () { printf "\n" if ! [[ "$start_object" = "$initial_commit" ]]; then - local new_casks="$(git diff --name-status "$start_object" "$end_object" -- $cask_paths | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - local deleted_casks="$(git diff --name-status "$start_object" "$end_object" -- $cask_paths | /usr/bin/grep '^D.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - local updated_casks="$(git diff --name-status "$start_object" "$end_object" -- $cask_paths | /usr/bin/grep '^M.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local new_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local deleted_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^D.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local updated_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^M.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" # arithmetic removes whitespace ((cask_authors += 0)) ((deleted_casks += 0)) @@ -132,7 +132,7 @@ _project_stats () { fi printf "Total current Casks in HEAD\t" - /usr/bin/find $cask_paths -name '*.rb' | /usr/bin/wc -l + /usr/bin/find "${cask_paths[@]}" -name '*.rb' | /usr/bin/wc -l } From 278091d55c671a04ba43a6cca4c4568e7466e3b0 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:13:00 -0500 Subject: [PATCH 24/28] devscript: factor contributor_stats into function hoist cask_authors into global variable, shared between functions --- developer/bin/project_stats | 64 +++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 2f303638f5..a6c9168cb7 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -23,6 +23,12 @@ declare -a code_paths=(bin developer lib test brew-cask.rb Rakefile Gemfile Gemf declare -a doc_paths=(LICENSE "*.md") end_object="HEAD" +### +### global variables +### + +cask_authors='' + ### ### functions ### @@ -70,6 +76,36 @@ verify_git_object () { fi } +print_contributor_stats () { + local start_object="$1" + local initial_commit="$2" + + local git_log_cmd="git log --no-merges --format='%ae' ${start_object}..${end_object}" + printf "Unique contributors" + if ! [[ "$start_object" = "$initial_commit" ]]; then + printf " since $start_object" + fi + printf "\n" + cask_authors="$($git_log_cmd -- "${cask_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + printf " Casks\t$cask_authors\n" + printf " code\t" + $git_log_cmd -- "${code_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l + printf " docs\t" + $git_log_cmd -- "${doc_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l + printf " any\t" + $git_log_cmd -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l + if ! [[ "$start_object" = "$initial_commit" ]]; then + local alltime_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${end_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local prior_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${start_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + # arithmetic removes whitespace + ((alltime_contribs += 0)) + ((new_contribs = alltime_contribs - prior_contribs)) + printf "\nAll-time contributors\t$alltime_contribs\n" + printf "New contributors since $start_object\t$new_contribs\n" + fi + printf "\n" +} + ### ### main ### @@ -91,33 +127,7 @@ _project_stats () { fi verify_git_object "$start_object" - printf "Unique contributors" - if ! [[ "$start_object" = "$initial_commit" ]]; then - printf " since $start_object" - fi - printf "\n" - - local git_log_cmd="git log --no-merges --format='%ae' ${start_object}..${end_object}" - - local cask_authors="$($git_log_cmd -- "${cask_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - printf " Casks\t$cask_authors\n" - printf " code\t" - $git_log_cmd -- "${code_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l - printf " docs\t" - $git_log_cmd -- "${doc_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l - printf " any\t" - $git_log_cmd -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l - if ! [[ "$start_object" = "$initial_commit" ]]; then - local alltime_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${end_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - local prior_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${start_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - # arithmetic removes whitespace - ((alltime_contribs += 0)) - ((new_contribs = alltime_contribs - prior_contribs)) - printf "\nAll-time contributors\t$alltime_contribs\n" - printf "New contributors since $start_object\t$new_contribs\n" - fi - - printf "\n" + print_contributor_stats "$start_object" "$initial_commit" if ! [[ "$start_object" = "$initial_commit" ]]; then local new_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" From 4bbd1256df73a8352f368dcd2145fb4b3e9a8c22 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:15:46 -0500 Subject: [PATCH 25/28] devscript: factor print_cask_stats into function --- developer/bin/project_stats | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index a6c9168cb7..9905ca3bd3 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -106,6 +106,26 @@ print_contributor_stats () { printf "\n" } +print_cask_stats () { + local start_object="$1" + local initial_commit="$2" + + if ! [[ "$start_object" = "$initial_commit" ]]; then + local new_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local deleted_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^D.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local updated_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^M.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + # arithmetic removes whitespace + ((cask_authors += 0)) + ((deleted_casks += 0)) + ((new_casks -= deleted_casks)) + ((updated_casks += 0)) + printf "$new_casks Casks added ($updated_casks updated) by $cask_authors contributors since $start_object\n" + fi + + printf "Total current Casks in HEAD\t" + /usr/bin/find "${cask_paths[@]}" -name '*.rb' | /usr/bin/wc -l +} + ### ### main ### @@ -128,22 +148,7 @@ _project_stats () { verify_git_object "$start_object" print_contributor_stats "$start_object" "$initial_commit" - - if ! [[ "$start_object" = "$initial_commit" ]]; then - local new_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - local deleted_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^D.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - local updated_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^M.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" - # arithmetic removes whitespace - ((cask_authors += 0)) - ((deleted_casks += 0)) - ((new_casks -= deleted_casks)) - ((updated_casks += 0)) - printf "$new_casks Casks added ($updated_casks updated) by $cask_authors contributors since $start_object\n" - fi - - printf "Total current Casks in HEAD\t" - /usr/bin/find "${cask_paths[@]}" -name '*.rb' | /usr/bin/wc -l - + print_cask_stats "$start_object" "$initial_commit" } # process args From 5d153a5f17b7e82e99c03b0d2d11f612f96cb915 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:17:12 -0500 Subject: [PATCH 26/28] devscript: add commit stats to project_stats --- developer/bin/project_stats | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 9905ca3bd3..7950697e96 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -106,6 +106,31 @@ print_contributor_stats () { printf "\n" } +print_commit_stats () { + local start_object="$1" + local initial_commit="$2" + + local git_log_cmd="git log --no-merges --format='%ae' ${start_object}..${end_object}" + printf "Commit count" + if ! [[ "$start_object" = "$initial_commit" ]]; then + printf " since $start_object" + fi + printf "\n" + printf " Casks\t" + $git_log_cmd -- "${cask_paths[@]}" | /usr/bin/wc -l + printf " code\t" + $git_log_cmd -- "${code_paths[@]}" | /usr/bin/wc -l + printf " docs\t" + $git_log_cmd -- "${doc_paths[@]}" | /usr/bin/wc -l + printf " any\t" + $git_log_cmd -- . | /usr/bin/wc -l + if ! [[ "$start_object" = "$initial_commit" ]]; then + printf "\nAll-time commits\t" + git log --no-merges --format='%ae' "${initial_commit}".."${end_object}" -- . | /usr/bin/wc -l + fi + printf "\n" +} + print_cask_stats () { local start_object="$1" local initial_commit="$2" @@ -148,6 +173,7 @@ _project_stats () { verify_git_object "$start_object" print_contributor_stats "$start_object" "$initial_commit" + print_commit_stats "$start_object" "$initial_commit" print_cask_stats "$start_object" "$initial_commit" } From fcf4735023284ca8632b1a12f8662bba6208d299 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:20:07 -0500 Subject: [PATCH 27/28] devscript: add missing paths --- developer/bin/project_stats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index 7950697e96..a8fae8177a 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -19,8 +19,8 @@ shopt -s nocasematch # case-insensitive regular expressions # these paths relative to project root declare -a cask_paths=(Casks) -declare -a code_paths=(bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock) -declare -a doc_paths=(LICENSE "*.md") +declare -a code_paths=(bin developer lib test brew-cask.rb Rakefile Gemfile Gemfile.lock .travis.yml .gitignore) +declare -a doc_paths=(doc LICENSE "*.md") end_object="HEAD" ### From 59535872786a68007733e56a0645934666f03b71 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 31 Jan 2014 12:20:18 -0500 Subject: [PATCH 28/28] devscript: whitespace --- developer/bin/project_stats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/bin/project_stats b/developer/bin/project_stats index a8fae8177a..1c50c39d71 100755 --- a/developer/bin/project_stats +++ b/developer/bin/project_stats @@ -93,7 +93,7 @@ print_contributor_stats () { printf " docs\t" $git_log_cmd -- "${doc_paths[@]}" | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l printf " any\t" - $git_log_cmd -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l + $git_log_cmd -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l if ! [[ "$start_object" = "$initial_commit" ]]; then local alltime_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${end_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" local prior_contribs="$(git log --no-merges --format='%ae' ${initial_commit}..${start_object} -- . | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" @@ -136,7 +136,7 @@ print_cask_stats () { local initial_commit="$2" if ! [[ "$start_object" = "$initial_commit" ]]; then - local new_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" + local new_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^A.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" local deleted_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^D.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" local updated_casks="$(git diff --name-status "$start_object" "$end_object" -- "${cask_paths[@]}" | /usr/bin/grep '^M.*\.rb' | cut -f2 | /usr/bin/sort | /usr/bin/uniq | /usr/bin/wc -l)" # arithmetic removes whitespace