diagnostic: port to generic layer.

This commit is contained in:
Mike McQuaid 2016-07-16 21:03:12 +01:00
parent 0e25fc0143
commit 9f74ca80af
4 changed files with 56 additions and 122 deletions

View File

@ -96,7 +96,7 @@ module Homebrew
<<-EOS.undent <<-EOS.undent
No developer tools installed. No developer tools installed.
Install clang or gcc. #{DevelopmentTools.installation_instructions}
EOS EOS
end end

View File

@ -48,70 +48,13 @@ module Homebrew
EOS EOS
end end
# TODO: distill down into single method definition a la BuildToolsError
if MacOS.version >= "10.9"
def check_for_installed_developer_tools
return if MacOS::Xcode.installed? || MacOS::CLT.installed?
<<-EOS.undent
No developer tools installed.
Install the Command Line Tools:
xcode-select --install
EOS
end
if OS::Mac.prerelease?
def check_xcode_up_to_date def check_xcode_up_to_date
return unless MacOS::Xcode.installed? && MacOS::Xcode.outdated? return unless MacOS::Xcode.installed? && MacOS::Xcode.outdated?
<<-EOS.undent <<-EOS.undent
Your Xcode (#{MacOS::Xcode.version}) is outdated Your Xcode (#{MacOS::Xcode.version}) is outdated
Please update to Xcode #{MacOS::Xcode.latest_version}. Please update to Xcode #{MacOS::Xcode.latest_version}.
Xcode can be updated from #{MacOS::Xcode.update_instructions}
https://developer.apple.com/xcode/downloads/
EOS
end
else
def check_xcode_up_to_date
return unless MacOS::Xcode.installed? && MacOS::Xcode.outdated?
<<-EOS.undent
Your Xcode (#{MacOS::Xcode.version}) is outdated
Please update to Xcode #{MacOS::Xcode.latest_version}.
Xcode can be updated from the App Store.
EOS
end
end
def check_clt_up_to_date
return unless MacOS::CLT.installed? && MacOS::CLT.outdated?
<<-EOS.undent
A newer Command Line Tools release is available.
Update them from Software Update in the App Store.
EOS
end
elsif MacOS.version == "10.8" || MacOS.version == "10.7"
def check_for_installed_developer_tools
return if MacOS::Xcode.installed? || MacOS::CLT.installed?
<<-EOS.undent
No developer tools installed.
You should install the Command Line Tools.
The standalone package can be obtained from
https://developer.apple.com/downloads
or it can be installed via Xcode's preferences.
EOS
end
def check_xcode_up_to_date
return unless MacOS::Xcode.installed? && MacOS::Xcode.outdated?
<<-EOS.undent
Your Xcode (#{MacOS::Xcode.version}) is outdated
Please update to Xcode #{MacOS::Xcode.latest_version}.
Xcode can be updated from
https://developer.apple.com/xcode/downloads/
EOS EOS
end end
@ -120,33 +63,9 @@ module Homebrew
<<-EOS.undent <<-EOS.undent
A newer Command Line Tools release is available. A newer Command Line Tools release is available.
The standalone package can be obtained from #{MacOS::CLT.update_instructions}
https://developer.apple.com/downloads
or it can be installed via Xcode's preferences.
EOS EOS
end end
else
def check_for_installed_developer_tools
return if MacOS::Xcode.installed?
<<-EOS.undent
Xcode is not installed. Most formulae need Xcode to build.
It can be installed from
https://developer.apple.com/xcode/downloads/
EOS
end
def check_xcode_up_to_date
return unless MacOS::Xcode.installed? && MacOS::Xcode.outdated?
<<-EOS.undent
Your Xcode (#{MacOS::Xcode.version}) is outdated
Please update to Xcode #{MacOS::Xcode.latest_version}.
Xcode can be updated from
https://developer.apple.com/xcode/downloads/
EOS
end
end
def check_for_osx_gcc_installer def check_for_osx_gcc_installer
return unless MacOS.version < "10.7" || ((MacOS::Xcode.version || "0") > "4.1") return unless MacOS.version < "10.7" || ((MacOS::Xcode.version || "0") > "4.1")

View File

@ -44,19 +44,6 @@ class DiagnosticChecksTest < Homebrew::TestCase
end end
end end
def test_check_for_other_package_managers
MacOS.stubs(:macports_or_fink).returns ["fink"]
assert_match "You have MacPorts or Fink installed:",
@checks.check_for_other_package_managers
end
def test_check_for_unsupported_osx
ARGV.stubs(:homebrew_developer?).returns false
OS::Mac.stubs(:prerelease?).returns true
assert_match "We do not provide support for this pre-release version.",
@checks.check_for_unsupported_osx
end
def test_check_access_homebrew_repository def test_check_access_homebrew_repository
mod = HOMEBREW_REPOSITORY.stat.mode & 0777 mod = HOMEBREW_REPOSITORY.stat.mode & 0777
HOMEBREW_REPOSITORY.chmod 0555 HOMEBREW_REPOSITORY.chmod 0555
@ -163,14 +150,6 @@ class DiagnosticChecksTest < Homebrew::TestCase
end end
end end
def test_check_for_unsupported_curl_vars
MacOS.stubs(:version).returns OS::Mac::Version.new("10.10")
ENV["SSL_CERT_DIR"] = "/some/path"
assert_match "SSL_CERT_DIR support was removed from Apple's curl.",
@checks.check_for_unsupported_curl_vars
end
def test_check_for_config_scripts def test_check_for_config_scripts
mktmpdir do |path| mktmpdir do |path|
file = "#{path}/foo-config" file = "#{path}/foo-config"
@ -226,9 +205,4 @@ class DiagnosticChecksTest < Homebrew::TestCase
end end
end end
end end
def test_check_for_beta_xquartz
MacOS::XQuartz.stubs(:version).returns("2.7.10_beta2")
assert_match "The following beta release of XQuartz is installed: 2.7.10_beta2", @checks.check_for_beta_xquartz
end
end end

View File

@ -0,0 +1,41 @@
require "testing_env"
require "fileutils"
require "pathname"
require "diagnostic"
class OSMacDiagnosticChecksTest < Homebrew::TestCase
def setup
@env = ENV.to_hash
@checks = Homebrew::Diagnostic::Checks.new
end
def teardown
ENV.replace(@env)
end
def test_check_for_other_package_managers
MacOS.stubs(:macports_or_fink).returns ["fink"]
assert_match "You have MacPorts or Fink installed:",
@checks.check_for_other_package_managers
end
def test_check_for_unsupported_osx
ARGV.stubs(:homebrew_developer?).returns false
OS::Mac.stubs(:prerelease?).returns true
assert_match "We do not provide support for this pre-release version.",
@checks.check_for_unsupported_osx
end
def test_check_for_unsupported_curl_vars
MacOS.stubs(:version).returns OS::Mac::Version.new("10.10")
ENV["SSL_CERT_DIR"] = "/some/path"
assert_match "SSL_CERT_DIR support was removed from Apple's curl.",
@checks.check_for_unsupported_curl_vars
end
def test_check_for_beta_xquartz
MacOS::XQuartz.stubs(:version).returns("2.7.10_beta2")
assert_match "The following beta release of XQuartz is installed: 2.7.10_beta2", @checks.check_for_beta_xquartz
end
end