Move some brew.rb logic to bin/brew.
This commit is contained in:
parent
b01ce41164
commit
6f91b429ce
@ -4,11 +4,6 @@ std_trap = trap("INT") { exit! 130 } # no backtrace thanks
|
|||||||
|
|
||||||
HOMEBREW_BREW_FILE = ENV["HOMEBREW_BREW_FILE"]
|
HOMEBREW_BREW_FILE = ENV["HOMEBREW_BREW_FILE"]
|
||||||
|
|
||||||
if ARGV == %w[--prefix]
|
|
||||||
puts File.dirname(File.dirname(HOMEBREW_BREW_FILE))
|
|
||||||
exit 0
|
|
||||||
end
|
|
||||||
|
|
||||||
require "pathname"
|
require "pathname"
|
||||||
HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent.join("Homebrew")
|
HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent.join("Homebrew")
|
||||||
$:.unshift(HOMEBREW_LIBRARY_PATH.to_s)
|
$:.unshift(HOMEBREW_LIBRARY_PATH.to_s)
|
||||||
@ -22,38 +17,6 @@ elsif ARGV.first == "-v"
|
|||||||
ARGV << ARGV.shift
|
ARGV << ARGV.shift
|
||||||
end
|
end
|
||||||
|
|
||||||
if OS.mac?
|
|
||||||
# Check for bad xcode-select before other checks, because `doctor` and
|
|
||||||
# many other things will hang. Note that this bug was fixed in 10.9
|
|
||||||
if MacOS.version < :mavericks && MacOS.active_developer_dir == "/"
|
|
||||||
odie <<-EOS.undent
|
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
# Check for user agreement of the Xcode license before permitting
|
|
||||||
# any other brew usage to continue. This prevents the situation where
|
|
||||||
# people are instructed to "please re-run as root via sudo" on brew commands.
|
|
||||||
# The check can only fail when Xcode is installed & the active developer dir.
|
|
||||||
if MacOS::Xcode.installed? && `/usr/bin/xcrun clang 2>&1` =~ /license/ && !$?.success?
|
|
||||||
odie <<-EOS.undent
|
|
||||||
You have not agreed to the Xcode license. Please resolve this by running:
|
|
||||||
sudo xcodebuild -license
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
case HOMEBREW_PREFIX.to_s
|
|
||||||
when "/", "/usr"
|
|
||||||
# it may work, but I only see pain this route and don't want to support it
|
|
||||||
abort "Cowardly refusing to continue at this prefix: #{HOMEBREW_PREFIX}"
|
|
||||||
end
|
|
||||||
|
|
||||||
if OS.mac? && MacOS.version < "10.6"
|
if OS.mac? && MacOS.version < "10.6"
|
||||||
abort <<-EOABORT.undent
|
abort <<-EOABORT.undent
|
||||||
Homebrew requires Snow Leopard or higher. For Tiger and Leopard support, see:
|
Homebrew requires Snow Leopard or higher. For Tiger and Leopard support, see:
|
||||||
@ -61,10 +24,6 @@ if OS.mac? && MacOS.version < "10.6"
|
|||||||
EOABORT
|
EOABORT
|
||||||
end
|
end
|
||||||
|
|
||||||
# Many Pathname operations use getwd when they shouldn't, and then throw
|
|
||||||
# odd exceptions. Reduce our support burden by showing a user-friendly error.
|
|
||||||
Dir.getwd rescue abort "The current working directory doesn't exist, cannot proceed."
|
|
||||||
|
|
||||||
def require?(path)
|
def require?(path)
|
||||||
require path
|
require path
|
||||||
rescue LoadError => e
|
rescue LoadError => e
|
||||||
@ -94,20 +53,6 @@ begin
|
|||||||
|
|
||||||
cmd = HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(cmd, cmd)
|
cmd = HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(cmd, cmd)
|
||||||
|
|
||||||
sudo_check = %w[ install reinstall postinstall link pin unpin
|
|
||||||
update upgrade create migrate tap switch ]
|
|
||||||
|
|
||||||
if sudo_check.include? cmd
|
|
||||||
if Process.uid.zero? && !File.stat(HOMEBREW_BREW_FILE).uid.zero?
|
|
||||||
raise <<-EOS.undent
|
|
||||||
Cowardly refusing to `sudo brew #{cmd}`
|
|
||||||
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
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Add contributed commands to PATH before checking.
|
# Add contributed commands to PATH before checking.
|
||||||
Dir["#{HOMEBREW_LIBRARY}/Taps/*/*/cmd"].each do |tap_cmd_dir|
|
Dir["#{HOMEBREW_LIBRARY}/Taps/*/*/cmd"].each do |tap_cmd_dir|
|
||||||
ENV["PATH"] += "#{File::PATH_SEPARATOR}#{tap_cmd_dir}"
|
ENV["PATH"] += "#{File::PATH_SEPARATOR}#{tap_cmd_dir}"
|
||||||
|
72
bin/brew
72
bin/brew
@ -37,6 +37,19 @@ else
|
|||||||
HOMEBREW_CELLAR="$HOMEBREW_REPOSITORY/Cellar"
|
HOMEBREW_CELLAR="$HOMEBREW_REPOSITORY/Cellar"
|
||||||
fi
|
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
|
||||||
|
echo "Cowardly refusing to continue at this prefix: $HOMEBREW_PREFIX" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Users may have these set, pointing the system Ruby
|
# Users may have these set, pointing the system Ruby
|
||||||
# at non-system gem paths
|
# at non-system gem paths
|
||||||
unset GEM_HOME
|
unset GEM_HOME
|
||||||
@ -47,9 +60,14 @@ then
|
|||||||
unset HOMEBREW_RUBY_PATH
|
unset HOMEBREW_RUBY_PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$(uname -s)" = "Darwin" ]
|
||||||
|
then
|
||||||
|
HOMEBREW_OSX="1"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$HOMEBREW_RUBY_PATH" ]
|
if [ -z "$HOMEBREW_RUBY_PATH" ]
|
||||||
then
|
then
|
||||||
if [ "$(uname -s)" = "Darwin" ]
|
if [ -n "$HOMEBREW_OSX" ]
|
||||||
then
|
then
|
||||||
HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby"
|
HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby"
|
||||||
else
|
else
|
||||||
@ -64,6 +82,42 @@ export HOMEBREW_REPOSITORY
|
|||||||
export HOMEBREW_LIBRARY
|
export HOMEBREW_LIBRARY
|
||||||
export HOMEBREW_CELLAR
|
export HOMEBREW_CELLAR
|
||||||
|
|
||||||
|
if [ -n "$HOMEBREW_OSX" ]
|
||||||
|
then
|
||||||
|
if [ "$('xcode-select' --print-path)" = "/" ]
|
||||||
|
then
|
||||||
|
cat >&2 <<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
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
XCRUN_OUTPUT="$(/usr/bin/xcrun clang 2>&1)"
|
||||||
|
XCRUN_STATUS="$?"
|
||||||
|
|
||||||
|
if [ "$XCRUN_STATUS" -ne 0 ] && [[ "$XCRUN_OUTPUT" = *license* ]]
|
||||||
|
then
|
||||||
|
cat >&2 <<EOS
|
||||||
|
You have not agreed to the Xcode license. Please resolve this by running:
|
||||||
|
sudo xcodebuild -license
|
||||||
|
EOS
|
||||||
|
exit 1
|
||||||
|
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
|
||||||
|
echo "The current working directory doesn't exist, cannot proceed." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
for i in "$@"
|
for i in "$@"
|
||||||
do
|
do
|
||||||
if [[ "$1" = -v ]]
|
if [[ "$1" = -v ]]
|
||||||
@ -72,10 +126,26 @@ do
|
|||||||
set -- "$@" -v
|
set -- "$@" -v
|
||||||
fi
|
fi
|
||||||
[[ "$i" =~ ^- ]] && continue
|
[[ "$i" =~ ^- ]] && continue
|
||||||
|
HOMEBREW_COMMAND="$i"
|
||||||
HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/cmd/$i.sh"
|
HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/cmd/$i.sh"
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [ "$(id -u)" = "0" ] && [ "$(stat -f%u "$HOMEBREW_BREW_FILE")" != "0" ]
|
||||||
|
then
|
||||||
|
case "$HOMEBREW_COMMAND" in
|
||||||
|
install|reinstall|postinstall|link|pin|unpin|update|update-bash|upgrade|create|migrate|tap|switch)
|
||||||
|
cat >&2 <<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
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$HOMEBREW_BASH_COMMAND" ] && [ -x "$HOMEBREW_BASH_COMMAND" ]
|
if [ -n "$HOMEBREW_BASH_COMMAND" ] && [ -x "$HOMEBREW_BASH_COMMAND" ]
|
||||||
then
|
then
|
||||||
# source rather than executing directly to ensure the entire file is read into
|
# source rather than executing directly to ensure the entire file is read into
|
||||||
|
Loading…
x
Reference in New Issue
Block a user