diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index 0abb8d37b1..42ac131e14 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -20,6 +20,10 @@ unless $LOAD_PATH.include?(HOMEBREW_LIBRARY_PATH.to_s) $LOAD_PATH.unshift(HOMEBREW_LIBRARY_PATH.to_s) end +unless $LOAD_PATH.include?("#{HOMEBREW_LIBRARY_PATH}/cask/lib") + $LOAD_PATH.unshift("#{HOMEBREW_LIBRARY_PATH}/cask/lib") +end + require "global" begin diff --git a/Library/Homebrew/cask/lib/hbc/cask.rb b/Library/Homebrew/cask/lib/hbc/cask.rb index 410dcfe649..2ec4cb652f 100644 --- a/Library/Homebrew/cask/lib/hbc/cask.rb +++ b/Library/Homebrew/cask/lib/hbc/cask.rb @@ -1,10 +1,13 @@ +require "hbc/cask_loader" require "hbc/dsl" require "hbc/metadata" +require "searchable" module Hbc class Cask extend Enumerable extend Forwardable + extend Searchable include Metadata attr_reader :token, :sourcefile_path, :config diff --git a/Library/Homebrew/cask/lib/hbc/cli/search.rb b/Library/Homebrew/cask/lib/hbc/cli/search.rb index bda5374d53..d7bd079bd1 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/search.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/search.rb @@ -14,31 +14,14 @@ module Hbc end end - def self.extract_regexp(string) - if string =~ %r{^/(.*)/$} - Regexp.last_match[1] - else - false - end - end - def self.search(*arguments) - partial_matches = [] - search_term = arguments.join(" ") - search_regexp = extract_regexp arguments.first - all_tokens = CLI.nice_listing(Cask.map(&:qualified_token)) - if search_regexp - search_term = arguments.first - partial_matches = all_tokens.grep(/#{search_regexp}/i) - else - simplified_tokens = all_tokens.map { |t| t.sub(%r{^.*\/}, "").gsub(/[^a-z0-9]+/i, "") } - simplified_search_term = search_term.sub(/\.rb$/i, "").gsub(/[^a-z0-9]+/i, "") - partial_matches = simplified_tokens.grep(/#{simplified_search_term}/i) { |t| all_tokens[simplified_tokens.index(t)] } - end + query = arguments.join(" ") + string_or_regex = query_regexp(query) + local_results = search_casks(string_or_regex) - remote_matches = search_taps(search_term, silent: true)[:casks] + remote_matches = search_taps(query, silent: true)[:casks] - [partial_matches, remote_matches, search_term] + [local_results, remote_matches, query] end def self.render_results(partial_matches, remote_matches, search_term) @@ -53,22 +36,13 @@ module Hbc end unless partial_matches.empty? - if extract_regexp search_term - ohai "Regexp Matches" - else - ohai "Matches" - end - puts Formatter.columns(partial_matches.map(&method(:highlight_installed))) + ohai "Matches" + puts Formatter.columns(partial_matches) end return if remote_matches.empty? ohai "Remote Matches" - puts Formatter.columns(remote_matches.map(&method(:highlight_installed))) - end - - def self.highlight_installed(token) - return token unless Cask.new(token).installed? - pretty_installed token + puts Formatter.columns(remote_matches) end def self.help diff --git a/Library/Homebrew/cmd/cask.rb b/Library/Homebrew/cmd/cask.rb index 550081d46d..b07e681deb 100644 --- a/Library/Homebrew/cmd/cask.rb +++ b/Library/Homebrew/cmd/cask.rb @@ -1,4 +1,3 @@ -$LOAD_PATH.unshift("#{HOMEBREW_LIBRARY_PATH}/cask/lib") require "hbc" module Homebrew diff --git a/Library/Homebrew/dev-cmd/irb.rb b/Library/Homebrew/dev-cmd/irb.rb index 2c5afe5a1e..97a0045826 100644 --- a/Library/Homebrew/dev-cmd/irb.rb +++ b/Library/Homebrew/dev-cmd/irb.rb @@ -47,7 +47,6 @@ module Homebrew require "formula" require "keg" - $LOAD_PATH.unshift("#{HOMEBREW_LIBRARY_PATH}/cask/lib") require "hbc" ohai "Interactive Homebrew Shell" diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index 183f67d806..d462e2bee2 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -40,6 +40,7 @@ module Homebrew ENV.delete("HOMEBREW_TEMP") ENV.delete("HOMEBREW_LINKAGE_CACHE") ENV.delete("HOMEBREW_NO_GITHUB_API") + ENV.delete("HOMEBREW_NO_EMOJI") ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1" ENV["HOMEBREW_DEVELOPER"] = "1" ENV["HOMEBREW_NO_COMPAT"] = "1" if args.no_compat? diff --git a/Library/Homebrew/search.rb b/Library/Homebrew/search.rb index ef01e7f202..736a854f81 100644 --- a/Library/Homebrew/search.rb +++ b/Library/Homebrew/search.rb @@ -1,4 +1,5 @@ require "searchable" +require "hbc/cask" module Homebrew module Search @@ -79,5 +80,17 @@ module Homebrew end end.compact end + + def search_casks(string_or_regex) + results = Hbc::Cask.search(string_or_regex, &:token).sort_by(&:token) + + results.map do |cask| + if cask.installed? + pretty_installed(cask.token) + else + cask.token + end + end + end end end diff --git a/Library/Homebrew/test/cask/cli/search_spec.rb b/Library/Homebrew/test/cask/cli/search_spec.rb index 379a27104d..092c19b737 100644 --- a/Library/Homebrew/test/cask/cli/search_spec.rb +++ b/Library/Homebrew/test/cask/cli/search_spec.rb @@ -87,7 +87,7 @@ describe Hbc::CLI::Search, :cask do expect { Hbc::CLI::Search.run("/^local-c[a-z]ffeine$/") }.to output(<<~EOS).to_stdout.as_tty - ==> Regexp Matches + ==> Matches local-caffeine EOS end @@ -110,13 +110,14 @@ describe Hbc::CLI::Search, :cask do EOS end - it "doesn't highlight packages that aren't installed" do - expect(Hbc::CLI::Search.highlight_installed("local-caffeine")).to eq("local-caffeine") - end - it "highlights installed packages" do Hbc::CLI::Install.run("local-caffeine") - expect(Hbc::CLI::Search.highlight_installed("local-caffeine")).to eq(pretty_installed("local-caffeine")) + expect { + Hbc::CLI::Search.run("local-caffeine") + }.to output(<<~EOS).to_stdout.as_tty + ==> Matches + local-caffeine ✔ + EOS end end diff --git a/Library/Homebrew/test/emoji_spec.rb b/Library/Homebrew/test/emoji_spec.rb index 371960ebc2..f2aec7ad2d 100644 --- a/Library/Homebrew/test/emoji_spec.rb +++ b/Library/Homebrew/test/emoji_spec.rb @@ -5,7 +5,6 @@ describe Emoji do subject { described_class.install_badge } before do - ENV.delete("HOMEBREW_NO_EMOJI") ENV.delete("HOMEBREW_INSTALL_BADGE") end diff --git a/Library/Homebrew/test/spec_helper.rb b/Library/Homebrew/test/spec_helper.rb index daf5e1a3df..a09afa11b6 100644 --- a/Library/Homebrew/test/spec_helper.rb +++ b/Library/Homebrew/test/spec_helper.rb @@ -15,6 +15,7 @@ require "rubocop/rspec/support" require "find" $LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_LIBRARY"]}/Homebrew")) +$LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_LIBRARY"]}/Homebrew/cask/lib")) $LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_LIBRARY"]}/Homebrew/test/support/lib")) require "global" diff --git a/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb b/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb index 4a58fbf5a9..6160538bfb 100644 --- a/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb +++ b/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb @@ -1,5 +1,3 @@ -$LOAD_PATH.push(HOMEBREW_LIBRARY_PATH.join("cask", "lib").to_s) - require "hbc" require "test/support/helper/cask/fake_system_command" diff --git a/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb b/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb index a92c27fc49..41d7174cc3 100644 --- a/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb +++ b/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb @@ -85,6 +85,7 @@ RSpec.shared_context "integration test" do "-W0", "-I", "#{HOMEBREW_LIBRARY_PATH}/test/support/lib", "-I", HOMEBREW_LIBRARY_PATH.to_s, + "-I", "#{HOMEBREW_LIBRARY_PATH}/cask/lib", "-rconfig" ] if ENV["HOMEBREW_TESTS_COVERAGE"] diff --git a/Library/Homebrew/test/utils_spec.rb b/Library/Homebrew/test/utils_spec.rb index dbfd1c3859..dc7cd76e09 100644 --- a/Library/Homebrew/test/utils_spec.rb +++ b/Library/Homebrew/test/utils_spec.rb @@ -32,8 +32,6 @@ describe "globally-scoped helper methods" do before { allow($stdout).to receive(:tty?).and_return(true) } context "with HOMEBREW_NO_EMOJI unset" do - before { ENV.delete("HOMEBREW_NO_EMOJI") } - it "returns a string with a colored checkmark" do expect(subject) .to match(/#{esc 1}foo #{esc 32}✔#{esc 0}/) @@ -66,8 +64,6 @@ describe "globally-scoped helper methods" do before { allow($stdout).to receive(:tty?).and_return(true) } context "with HOMEBREW_NO_EMOJI unset" do - before { ENV.delete("HOMEBREW_NO_EMOJI") } - it "returns a string with a colored checkmark" do expect(subject) .to match(/#{esc 1}foo #{esc 31}✘#{esc 0}/)