From 252c701c59227c385ef6178fe99523cca8c843bb Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 4 Jul 2016 16:08:53 +0100 Subject: [PATCH] Test officially supported cmd taps. (#390) All of these taps use Homebrew internal APIs (or will shortly) and we autoinstall them all from `brew $CMD`. We should adjust our CI to ensure that we never accidentally break these taps when making changes to core code so that these taps can rely more on this core code rather than having to e.g. vendor equivalent code that never changes on our end. --- Library/Homebrew/cmd/tests.rb | 14 ++++++- Library/Homebrew/dev-cmd/test-bot.rb | 1 + Library/Homebrew/global.rb | 1 + Library/Homebrew/official_taps.rb | 8 +++- .../Homebrew/test/test_integration_cmds.rb | 37 +++++++++++++++++++ Library/brew.rb | 10 +---- 6 files changed, 60 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/cmd/tests.rb b/Library/Homebrew/cmd/tests.rb index ae10f0f7ab..2e6bb647bd 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 2f6c44d3a2..9e55fbfa63 100644 --- a/Library/Homebrew/dev-cmd/test-bot.rb +++ b/Library/Homebrew/dev-cmd/test-bot.rb @@ -659,6 +659,7 @@ module 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 52bee21660..02ff15e39f 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -9,6 +9,7 @@ require "utils" 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 75ad096c70..aedb0809e2 100644 --- a/Library/Homebrew/official_taps.rb +++ b/Library/Homebrew/official_taps.rb @@ -15,4 +15,10 @@ OFFICIAL_TAPS = %w[ 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 cc8f3b4585..9b37fa545d 100644 --- a/Library/Homebrew/test/test_integration_cmds.rb +++ b/Library/Homebrew/test/test_integration_cmds.rb @@ -17,6 +17,12 @@ class IntegrationCommandTests < Homebrew::TestCase @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 @@ class IntegrationCommandTests < Homebrew::TestCase 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 0a1df9f9b6..c06aa735e0 100644 --- a/Library/brew.rb +++ b/Library/brew.rb @@ -94,14 +94,8 @@ begin 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