diff --git a/Library/Homebrew/cmd/tests.rb b/Library/Homebrew/cmd/tests.rb index ae10f0f7abafc..2e6bb647bd5de 100644 --- a/Library/Homebrew/cmd/tests.rb +++ b/Library/Homebrew/cmd/tests.rb @@ -1,13 +1,23 @@ #: @hide_from_man_page -#: * `tests` [`-v`] [`--coverage`] [`--generic`] [`--no-compat`] [`--only=`] [`--seed` ] [`--trace`] [`--online`]: +#: * `tests` [`-v`] [`--coverage`] [`--generic`] [`--no-compat`] [`--only=`] [`--seed` ] [`--trace`] [`--online`] [`--official-cmd-taps`]: #: Run Homebrew's unit and integration tests. require "fileutils" +require "tap" module Homebrew def tests + ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1" + + if ARGV.include? "--official-cmd-taps" + ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"] = "1" + OFFICIAL_CMD_TAPS.each do |tap, _| + tap = Tap.fetch tap + tap.install unless tap.installed? + end + end + (HOMEBREW_LIBRARY/"Homebrew/test").cd do - ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1" ENV["TESTOPTS"] = "-v" if ARGV.verbose? ENV["HOMEBREW_NO_COMPAT"] = "1" if ARGV.include? "--no-compat" ENV["HOMEBREW_TEST_GENERIC_OS"] = "1" if ARGV.include? "--generic" diff --git a/Library/Homebrew/dev-cmd/test-bot.rb b/Library/Homebrew/dev-cmd/test-bot.rb index 2f6c44d3a2f45..9e55fbfa635d8 100644 --- a/Library/Homebrew/dev-cmd/test-bot.rb +++ b/Library/Homebrew/dev-cmd/test-bot.rb @@ -659,6 +659,7 @@ def homebrew test "brew", "tests", *tests_args test "brew", "tests", "--no-compat" test "brew", "readall", "--syntax" + test "brew", "tests", "--official-cmd-taps" else test "brew", "readall", "--aliases", @tap.name end diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 52bee21660078..02ff15e39f623 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -9,6 +9,7 @@ require "exceptions" require "set" require "rbconfig" +require "official_taps" ARGV.extend(HomebrewArgvExtension) diff --git a/Library/Homebrew/official_taps.rb b/Library/Homebrew/official_taps.rb index 75ad096c70fb2..aedb0809e207b 100644 --- a/Library/Homebrew/official_taps.rb +++ b/Library/Homebrew/official_taps.rb @@ -15,4 +15,10 @@ tex versions x11 -] +].freeze + +OFFICIAL_CMD_TAPS = { + "caskroom/cask" => ["cask"], + "homebrew/bundle" => ["bundle"], + "homebrew/services" => ["services"], +}.freeze diff --git a/Library/Homebrew/test/test_integration_cmds.rb b/Library/Homebrew/test/test_integration_cmds.rb index cc8f3b45850c0..9b37fa545d3de 100644 --- a/Library/Homebrew/test/test_integration_cmds.rb +++ b/Library/Homebrew/test/test_integration_cmds.rb @@ -17,6 +17,12 @@ def teardown @formula_files.each(&:unlink) end + def needs_test_cmd_taps + unless ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"] + skip "HOMEBREW_TEST_OFFICIAL_CMD_TAPS is not set" + end + end + def cmd_id_from_args(args) args_pretty = args.join(" ").gsub(TEST_TMPDIR, "@TMPDIR@") test_pretty = "#{self.class.name}\##{name}.#{@cmd_id_index += 1}" @@ -668,4 +674,35 @@ def test_search ensure desc_cache.unlink end + + def test_bundle + needs_test_cmd_taps + HOMEBREW_REPOSITORY.cd do + shutup do + system "git", "init" + system "git", "commit", "--allow-empty", "-m", "This is a test commit" + end + end + + mktmpdir do |path| + FileUtils.touch "#{path}/Brewfile" + Dir.chdir path do + assert_equal "The Brewfile's dependencies are satisfied.", + cmd("bundle", "check") + end + end + ensure + FileUtils.rm_rf HOMEBREW_REPOSITORY/".git" + end + + def test_cask + needs_test_cmd_taps + assert_equal "Warning: nothing to list", cmd("cask", "list") + end + + def test_services + needs_test_cmd_taps + assert_equal "Warning: No services available to control with `brew services`", + cmd("services", "list") + end end diff --git a/Library/brew.rb b/Library/brew.rb index 0a1df9f9b6307..c06aa735e02ef 100644 --- a/Library/brew.rb +++ b/Library/brew.rb @@ -94,14 +94,8 @@ def require?(path) exit Homebrew.failed? ? 1 : 0 else require "tap" - possible_tap = case cmd - when "brewdle", "brewdler", "bundle", "bundler" - Tap.fetch("Homebrew", "bundle") - when "cask" - Tap.fetch("caskroom", "cask") - when "services" - Tap.fetch("Homebrew", "services") - end + possible_tap = OFFICIAL_CMD_TAPS.find { |_, cmds| cmds.include?(cmd) } + possible_tap = Tap.fetch(possible_tap.first) if possible_tap if possible_tap && !possible_tap.installed? brew_uid = HOMEBREW_BREW_FILE.stat.uid