aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2016-02-16 09:29:03 +0000
committerMike McQuaid2016-02-16 09:31:58 +0000
commit691e4aec11a71bdd88a59391aa7b56ea0cf48639 (patch)
tree425e26700a51dc40a8ac3f4b206edc914316f684
parent4e51c0b8ea371d15d2ae996700e1c988e79cab17 (diff)
downloadbrew-691e4aec11a71bdd88a59391aa7b56ea0cf48639.tar.bz2
bin/brew: move logic to Library.
`bin/brew` is getting a bit bloated and it's annoying to open all of `HOMEBREW_PREFIX` in your editor of choice and have it search through the `Cellar`. Let's instead keep the bare minimum in `bin/brew` and move the rest to `Library`. Closes Homebrew/homebrew#49185. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
-rw-r--r--Library/brew.sh172
-rwxr-xr-xbin/brew172
2 files changed, 174 insertions, 170 deletions
diff --git a/Library/brew.sh b/Library/brew.sh
new file mode 100644
index 000000000..015ee17e5
--- /dev/null
+++ b/Library/brew.sh
@@ -0,0 +1,172 @@
+odie() {
+ if [[ -t 2 ]] # check whether stderr is a tty.
+ then
+ echo -ne "\033[4;31mError\033[0m: " >&2 # highlight Error with underline and red color
+ else
+ echo -n "Error: " >&2
+ fi
+ if [[ $# -eq 0 ]]
+ then
+ /bin/cat >&2
+ else
+ echo "$*" >&2
+ fi
+ exit 1
+}
+
+chdir() {
+ cd "$@" >/dev/null || odie "Error: failed to cd to $*!"
+}
+
+# Force UTF-8 to avoid encoding issues for users with broken locale settings.
+if [[ "$(locale charmap 2> /dev/null)" != "UTF-8" ]]
+then
+ export LC_ALL="en_US.UTF-8"
+fi
+
+# Where we store built products; /usr/local/Cellar if it exists,
+# otherwise a Cellar relative to the Repository.
+if [[ -d "$HOMEBREW_PREFIX/Cellar" ]]
+then
+ HOMEBREW_CELLAR="$HOMEBREW_PREFIX/Cellar"
+else
+ HOMEBREW_CELLAR="$HOMEBREW_REPOSITORY/Cellar"
+fi
+
+case "$*" in
+ --prefix) echo "$HOMEBREW_PREFIX"; exit 0 ;;
+ --cellar) echo "$HOMEBREW_CELLAR"; exit 0 ;;
+ --repository|--repo) echo "$HOMEBREW_REPOSITORY"; exit 0 ;;
+esac
+
+if [[ "$HOMEBREW_PREFIX" = "/" || "$HOMEBREW_PREFIX" = "/usr" ]]
+then
+ # it may work, but I only see pain this route and don't want to support it
+ odie "Cowardly refusing to continue at this prefix: $HOMEBREW_PREFIX"
+fi
+
+# Users may have these set, pointing the system Ruby
+# at non-system gem paths
+unset GEM_HOME
+unset GEM_PATH
+
+if [[ -z "$HOMEBREW_DEVELOPER" ]]
+then
+ unset HOMEBREW_RUBY_PATH
+fi
+
+if [[ "$(uname -s)" = "Darwin" ]]
+then
+ HOMEBREW_OSX="1"
+fi
+
+if [[ -z "$HOMEBREW_RUBY_PATH" ]]
+then
+ if [[ -n "$HOMEBREW_OSX" ]]
+ then
+ HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby"
+ else
+ HOMEBREW_RUBY_PATH="$(which ruby)"
+ fi
+fi
+
+export HOMEBREW_BREW_FILE
+export HOMEBREW_RUBY_PATH
+export HOMEBREW_PREFIX
+export HOMEBREW_REPOSITORY
+export HOMEBREW_LIBRARY
+export HOMEBREW_CELLAR
+
+if [[ -n "$HOMEBREW_OSX" ]]
+then
+ if [[ "$('/usr/bin/xcode-select' --print-path)" = "/" ]]
+ then
+ odie <<EOS
+Your xcode-select path is currently set to '/'.
+This causes the 'xcrun' tool to hang, and can render Homebrew unusable.
+If you are using Xcode, you should:
+ sudo xcode-select -switch /Applications/Xcode.app
+Otherwise, you should:
+ sudo rm -rf /usr/share/xcode-select
+EOS
+ fi
+
+ XCRUN_OUTPUT="$(/usr/bin/xcrun clang 2>&1)"
+ XCRUN_STATUS="$?"
+
+ if [[ "$XCRUN_STATUS" -ne 0 && "$XCRUN_OUTPUT" = *license* ]]
+ then
+ odie <<EOS
+You have not agreed to the Xcode license. Please resolve this by running:
+ sudo xcodebuild -license
+EOS
+ fi
+fi
+
+# Many Pathname operations use getwd when they shouldn't, and then throw
+# odd exceptions. Reduce our support burden by showing a user-friendly error.
+if [[ ! -d "$(pwd)" ]]
+then
+ odie "The current working directory doesn't exist, cannot proceed."
+fi
+
+if [[ "$1" = -v ]]
+then
+ # Shift the -v to the end of the parameter list
+ shift
+ set -- "$@" -v
+fi
+
+HOMEBREW_COMMAND="$1"
+shift
+case "$HOMEBREW_COMMAND" in
+ ls) HOMEBREW_COMMAND="list";;
+ homepage) HOMEBREW_COMMAND="home";;
+ -S) HOMEBREW_COMMAND="search";;
+ up) HOMEBREW_COMMAND="update";;
+ ln) HOMEBREW_COMMAND="link";;
+ instal) HOMEBREW_COMMAND="install";; # gem does the same
+ rm) HOMEBREW_COMMAND="uninstall";;
+ remove) HOMEBREW_COMMAND="uninstall";;
+ configure) HOMEBREW_COMMAND="diy";;
+ abv) HOMEBREW_COMMAND="info";;
+ dr) HOMEBREW_COMMAND="doctor";;
+ --repo) HOMEBREW_COMMAND="--repository";;
+ environment) HOMEBREW_COMMAND="--env";;
+ --config) HOMEBREW_COMMAND="config";;
+esac
+
+if [[ -f "$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh" ]] ; then
+ HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh"
+elif [[ -n "$HOMEBREW_DEVELOPER" && -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" ]] ; then
+ HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh"
+fi
+
+if [[ "$(id -u)" = "0" && "$(/usr/bin/stat -f%u "$HOMEBREW_BREW_FILE")" != "0" ]]
+then
+ case "$HOMEBREW_COMMAND" in
+ install|reinstall|postinstall|link|pin|update|update-ruby|upgrade|create|migrate|tap|switch)
+ odie <<EOS
+Cowardly refusing to 'sudo brew $HOMEBREW_COMMAND'
+You can use brew with sudo, but only if the brew executable is owned by root.
+However, this is both not recommended and completely unsupported so do so at
+your own risk.
+EOS
+ ;;
+ esac
+fi
+
+if [[ -n "$HOMEBREW_BASH_COMMAND" ]]
+then
+ # source rather than executing directly to ensure the entire file is read into
+ # memory before it is run. This makes running a Bash script behave more like
+ # a Ruby script and avoids hard-to-debug issues if the Bash script is updated
+ # at the same time as being run.
+ #
+ # Hide shellcheck complaint:
+ # shellcheck source=/dev/null
+ source "$HOMEBREW_BASH_COMMAND"
+ { "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; }
+else
+ exec "$HOMEBREW_RUBY_PATH" -W0 "$HOMEBREW_LIBRARY/brew.rb" "$HOMEBREW_COMMAND" "$@"
+fi
diff --git a/bin/brew b/bin/brew
index dbbea5193..bc963e6c8 100755
--- a/bin/brew
+++ b/bin/brew
@@ -1,31 +1,8 @@
#!/bin/bash
-
-odie() {
- if [[ -t 2 ]] # check whether stderr is a tty.
- then
- echo -ne "\033[4;31mError\033[0m: " >&2 # highlight Error with underline and red color
- else
- echo -n "Error: " >&2
- fi
- if [[ $# -eq 0 ]]
- then
- /bin/cat >&2
- else
- echo "$*" >&2
- fi
- exit 1
-}
-
chdir() {
- cd "$@" >/dev/null || odie "Error: failed to cd to $*!"
+ cd "$@" >/dev/null
}
-# Force UTF-8 to avoid encoding issues for users with broken locale settings.
-if [[ "$(locale charmap 2> /dev/null)" != "UTF-8" ]]
-then
- export LC_ALL="en_US.UTF-8"
-fi
-
BREW_FILE_DIRECTORY="$(chdir "${0%/*}" && pwd -P)"
HOMEBREW_BREW_FILE="$BREW_FILE_DIRECTORY/${0##*/}"
@@ -41,149 +18,4 @@ HOMEBREW_PREFIX="$(chdir "$(dirname "$(dirname "$HOMEBREW_BREW_FILE")")" && pwd
HOMEBREW_REPOSITORY="$(chdir "$BREW_FILE_DIRECTORY"/../ && pwd -P)"
HOMEBREW_LIBRARY="$(chdir "$BREW_FILE_DIRECTORY"/../Library && pwd -P)"
-# Where we store built products; /usr/local/Cellar if it exists,
-# otherwise a Cellar relative to the Repository.
-if [[ -d "$HOMEBREW_PREFIX/Cellar" ]]
-then
- HOMEBREW_CELLAR="$HOMEBREW_PREFIX/Cellar"
-else
- HOMEBREW_CELLAR="$HOMEBREW_REPOSITORY/Cellar"
-fi
-
-case "$*" in
- --prefix) echo "$HOMEBREW_PREFIX"; exit 0 ;;
- --cellar) echo "$HOMEBREW_CELLAR"; exit 0 ;;
- --repository|--repo) echo "$HOMEBREW_REPOSITORY"; exit 0 ;;
-esac
-
-if [[ "$HOMEBREW_PREFIX" = "/" || "$HOMEBREW_PREFIX" = "/usr" ]]
-then
- # it may work, but I only see pain this route and don't want to support it
- odie "Cowardly refusing to continue at this prefix: $HOMEBREW_PREFIX"
-fi
-
-# Users may have these set, pointing the system Ruby
-# at non-system gem paths
-unset GEM_HOME
-unset GEM_PATH
-
-if [[ -z "$HOMEBREW_DEVELOPER" ]]
-then
- unset HOMEBREW_RUBY_PATH
-fi
-
-if [[ "$(uname -s)" = "Darwin" ]]
-then
- HOMEBREW_OSX="1"
-fi
-
-if [[ -z "$HOMEBREW_RUBY_PATH" ]]
-then
- if [[ -n "$HOMEBREW_OSX" ]]
- then
- HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby"
- else
- HOMEBREW_RUBY_PATH="$(which ruby)"
- fi
-fi
-
-export HOMEBREW_BREW_FILE
-export HOMEBREW_RUBY_PATH
-export HOMEBREW_PREFIX
-export HOMEBREW_REPOSITORY
-export HOMEBREW_LIBRARY
-export HOMEBREW_CELLAR
-
-if [[ -n "$HOMEBREW_OSX" ]]
-then
- if [[ "$('/usr/bin/xcode-select' --print-path)" = "/" ]]
- then
- odie <<EOS
-Your xcode-select path is currently set to '/'.
-This causes the 'xcrun' tool to hang, and can render Homebrew unusable.
-If you are using Xcode, you should:
- sudo xcode-select -switch /Applications/Xcode.app
-Otherwise, you should:
- sudo rm -rf /usr/share/xcode-select
-EOS
- fi
-
- XCRUN_OUTPUT="$(/usr/bin/xcrun clang 2>&1)"
- XCRUN_STATUS="$?"
-
- if [[ "$XCRUN_STATUS" -ne 0 && "$XCRUN_OUTPUT" = *license* ]]
- then
- odie <<EOS
-You have not agreed to the Xcode license. Please resolve this by running:
- sudo xcodebuild -license
-EOS
- fi
-fi
-
-# Many Pathname operations use getwd when they shouldn't, and then throw
-# odd exceptions. Reduce our support burden by showing a user-friendly error.
-if [[ ! -d "$(pwd)" ]]
-then
- odie "The current working directory doesn't exist, cannot proceed."
-fi
-
-if [[ "$1" = -v ]]
-then
- # Shift the -v to the end of the parameter list
- shift
- set -- "$@" -v
-fi
-
-HOMEBREW_COMMAND="$1"
-shift
-case "$HOMEBREW_COMMAND" in
- ls) HOMEBREW_COMMAND="list";;
- homepage) HOMEBREW_COMMAND="home";;
- -S) HOMEBREW_COMMAND="search";;
- up) HOMEBREW_COMMAND="update";;
- ln) HOMEBREW_COMMAND="link";;
- instal) HOMEBREW_COMMAND="install";; # gem does the same
- rm) HOMEBREW_COMMAND="uninstall";;
- remove) HOMEBREW_COMMAND="uninstall";;
- configure) HOMEBREW_COMMAND="diy";;
- abv) HOMEBREW_COMMAND="info";;
- dr) HOMEBREW_COMMAND="doctor";;
- --repo) HOMEBREW_COMMAND="--repository";;
- environment) HOMEBREW_COMMAND="--env";;
- --config) HOMEBREW_COMMAND="config";;
-esac
-
-if [[ -f "$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh" ]] ; then
- HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh"
-elif [[ -n "$HOMEBREW_DEVELOPER" && -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" ]] ; then
- HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh"
-fi
-
-if [[ "$(id -u)" = "0" && "$(/usr/bin/stat -f%u "$HOMEBREW_BREW_FILE")" != "0" ]]
-then
- case "$HOMEBREW_COMMAND" in
- install|reinstall|postinstall|link|pin|update|update-ruby|upgrade|create|migrate|tap|switch)
- odie <<EOS
-Cowardly refusing to 'sudo brew $HOMEBREW_COMMAND'
-You can use brew with sudo, but only if the brew executable is owned by root.
-However, this is both not recommended and completely unsupported so do so at
-your own risk.
-EOS
- ;;
- esac
-fi
-
-if [[ -n "$HOMEBREW_BASH_COMMAND" ]]
-then
- # source rather than executing directly to ensure the entire file is read into
- # memory before it is run. This makes running a Bash script behave more like
- # a Ruby script and avoids hard-to-debug issues if the Bash script is updated
- # at the same time as being run.
- #
- # Hide shellcheck complaint:
- # shellcheck source=/dev/null
- source "$HOMEBREW_BASH_COMMAND"
- { "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; }
-else
- exec "$HOMEBREW_RUBY_PATH" -W0 "$HOMEBREW_LIBRARY/brew.rb" "$HOMEBREW_COMMAND" "$@"
-fi
+source "$HOMEBREW_LIBRARY/brew.sh"