brew: error out if bad xcode-select path given

Since a bad xcode-select path can cause many brew commands to freeze,
it's worth warning users and bailing out as early as possible.

The doctor check wasn't good enough, since the doctor could freeze
before the warning about this was ever printed.
This commit is contained in:
Misty De Meo 2013-12-13 08:28:49 -08:00
parent 569bd7c425
commit 775406be91
2 changed files with 17 additions and 9 deletions

View File

@ -437,15 +437,7 @@ def check_xcode_prefix_exists
end end
def check_xcode_select_path def check_xcode_select_path
# with the advent of CLT-only support, we don't need xcode-select if not MacOS::CLT.installed? and not File.file? "#{MacOS::Xcode.folder}/usr/bin/xcodebuild"
if MacOS::Xcode.bad_xcode_select_path?
<<-EOS.undent
Your xcode-select path is set to /
You must unset it or builds will hang:
sudo rm /usr/share/xcode-select/xcode_dir_*
EOS
elsif not MacOS::CLT.installed? and not File.file? "#{MacOS::Xcode.folder}/usr/bin/xcodebuild"
path = MacOS.app_with_bundle_id(MacOS::Xcode::V4_BUNDLE_ID) || MacOS.app_with_bundle_id(MacOS::Xcode::V3_BUNDLE_ID) path = MacOS.app_with_bundle_id(MacOS::Xcode::V4_BUNDLE_ID) || MacOS.app_with_bundle_id(MacOS::Xcode::V3_BUNDLE_ID)
path = '/Developer' if path.nil? or not path.directory? path = '/Developer' if path.nil? or not path.directory?
<<-EOS.undent <<-EOS.undent

View File

@ -16,6 +16,22 @@ $:.unshift(HOMEBREW_LIBRARY_PATH + '/vendor')
$:.unshift(HOMEBREW_LIBRARY_PATH) $:.unshift(HOMEBREW_LIBRARY_PATH)
require 'global' require 'global'
# Check for bad xcode-select before anything else, because `doctor` and
# many other things will hang
# Note that this bug was fixed in 10.9
if `xcode-select -print-path 2>/dev/null`.chomp == '/' && MacOS.version < :mavericks
ofail <<-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
exit -1
end
case ARGV.first when '-h', '--help', '--usage', '-?', 'help', nil case ARGV.first when '-h', '--help', '--usage', '-?', 'help', nil
require 'cmd/help' require 'cmd/help'
puts Homebrew.help_s puts Homebrew.help_s