diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index eb93d380b9a0..c2789a40ea26 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -19,7 +19,8 @@ def install msg = blacklisted? name raise "No available formula for #{name}\n#{msg}" if msg end - if not File.exist? name and name =~ HOMEBREW_TAP_FORMULA_REGEX then + if !File.exist?(name) && (name =~ HOMEBREW_TAP_FORMULA_REGEX \ + || name =~ HOMEBREW_CASK_TAP_FORMULA_REGEX) install_tap $1, $2 end end unless ARGV.force? @@ -27,6 +28,17 @@ def install begin formulae = [] + if ARGV.casks.any? + brew_cask = Formulary.factory("brew-cask") + install_formula(brew_cask) unless brew_cask.installed? + + ARGV.casks.each do |c| + cmd = "brew", "cask", "install", c + ohai cmd.join " " + system *cmd + end + end + ARGV.formulae.each do |f| # Building head-only without --HEAD is an error if not ARGV.build_head? and f.stable.nil? diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index d8a68fcecd99..b05ceec7ce0a 100644 --- a/Library/Homebrew/cmd/search.rb +++ b/Library/Homebrew/cmd/search.rb @@ -76,6 +76,7 @@ def search %w{Homebrew binary}, %w{Homebrew python}, %w{Homebrew php}, + %w{Caskroom cask}, ] def query_regexp(query) @@ -94,7 +95,10 @@ def search_taps(rx) end def search_tap user, repo, rx - return [] if (HOMEBREW_LIBRARY/"Taps/#{user.downcase}/homebrew-#{repo.downcase}").directory? + if (HOMEBREW_LIBRARY/"Taps/#{user.downcase}/homebrew-#{repo.downcase}").directory? && \ + "#{user}/#{repo}" != "Caskroom/cask" + return [] + end results = [] tree = {} @@ -113,7 +117,7 @@ def search_tap user, repo, rx end end - paths = tree["Formula"] || tree["HomebrewFormula"] || tree["."] || [] + paths = tree["Formula"] || tree["HomebrewFormula"] || tree["Casks"] || tree["."] || [] paths.each do |path| name = File.basename(path, ".rb") results << "#{user}/#{repo}/#{name}" if rx === name diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 669cb5d02b34..0e2bfac51838 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -13,7 +13,11 @@ def flags_only def formulae require "formula" - @formulae ||= downcased_unique_named.map { |name| Formulary.factory(name, spec) } + @formulae ||= (downcased_unique_named - casks).map { |name| Formulary.factory(name, spec) } + end + + def casks + @casks ||= downcased_unique_named.grep HOMEBREW_CASK_TAP_FORMULA_REGEX end def kegs diff --git a/Library/Homebrew/tap_constants.rb b/Library/Homebrew/tap_constants.rb index 2aed1887da96..4392f5f926d0 100644 --- a/Library/Homebrew/tap_constants.rb +++ b/Library/Homebrew/tap_constants.rb @@ -6,3 +6,5 @@ HOMEBREW_TAP_DIR_REGEX = %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/([\w-]+)/([\w-]+)} # match taps' formula path, e.g. HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula HOMEBREW_TAP_PATH_REGEX = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + %r{/(.*)}.source) +# match the default brew-cask tap e.g. Caskroom/cask +HOMEBREW_CASK_TAP_FORMULA_REGEX = %r{^(Caskroom)/(cask)/([\w+-.]+)$} diff --git a/Library/Homebrew/test/test_ARGV.rb b/Library/Homebrew/test/test_ARGV.rb index fe50621cd567..e02c7040e215 100644 --- a/Library/Homebrew/test/test_ARGV.rb +++ b/Library/Homebrew/test/test_ARGV.rb @@ -11,6 +11,11 @@ def test_argv_formulae assert_raises(FormulaUnavailableError) { @argv.formulae } end + def test_argv_casks + @argv.unshift 'mxcl' + assert_equal [], @argv.casks + end + def test_argv_kegs keg = HOMEBREW_CELLAR + "mxcl/10.0" keg.mkpath