From 89a63fb1778dbfd4140a774c32dededf5b2a4585 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Thu, 25 Aug 2016 05:19:14 +0200 Subject: [PATCH] Add `cask_files` method to `Tap` class. --- Library/Homebrew/cask/lib/hbc/cli/doctor.rb | 12 ++++------ Library/Homebrew/cask/lib/hbc/cli/search.rb | 2 +- Library/Homebrew/cask/lib/hbc/scopes.rb | 26 +++++---------------- Library/Homebrew/tap.rb | 15 +++++++++--- 4 files changed, 23 insertions(+), 32 deletions(-) diff --git a/Library/Homebrew/cask/lib/hbc/cli/doctor.rb b/Library/Homebrew/cask/lib/hbc/cli/doctor.rb index 857471420a..2632bcaef1 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/doctor.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/doctor.rb @@ -33,18 +33,14 @@ class Hbc::CLI::Doctor < Hbc::CLI::Base end def self.alt_taps - Tap.select { |t| t.cask_dir.directory? && t != Hbc.default_tap } + Tap.select { |t| t.cask_dir && t != Hbc.default_tap } .map(&:path) end def self.default_cask_count - default_cask_count = notfound_string - begin - default_cask_count = Hbc.default_tap.cask_dir.children.count(&:file?) - rescue StandardError - default_cask_count = "0 #{error_string "Error reading #{Hbc.default_tap.path}"}" - end - default_cask_count + Hbc.default_tap.cask_files.count + rescue StandardError + "0 #{error_string "Error reading #{Hbc.default_tap.path}"}" end def self.homebrew_origin diff --git a/Library/Homebrew/cask/lib/hbc/cli/search.rb b/Library/Homebrew/cask/lib/hbc/cli/search.rb index c356128a68..2149a524bc 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/search.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/search.rb @@ -21,7 +21,7 @@ class Hbc::CLI::Search < Hbc::CLI::Base partial_matches = Hbc::CLI.nice_listing(Hbc.all_tokens).grep(%r{#{search_regexp}}i) else # suppressing search of the font Tap is a quick hack until behavior can be made configurable - all_tokens = Hbc::CLI.nice_listing Hbc.all_tokens.reject { |t| %r{^caskroom/homebrew-fonts/}.match(t) } + all_tokens = Hbc::CLI.nice_listing Hbc.all_tokens.reject { |t| %r{^caskroom/fonts/}.match(t) } simplified_tokens = all_tokens.map { |t| t.sub(%r{^.*\/}, "").gsub(%r{[^a-z0-9]+}i, "") } simplified_search_term = search_term.sub(%r{\.rb$}i, "").gsub(%r{[^a-z0-9]+}i, "") exact_match = simplified_tokens.grep(%r{^#{simplified_search_term}$}i) { |t| all_tokens[simplified_tokens.index(t)] }.first diff --git a/Library/Homebrew/cask/lib/hbc/scopes.rb b/Library/Homebrew/cask/lib/hbc/scopes.rb index 3fbb59d26d..431c3ff475 100644 --- a/Library/Homebrew/cask/lib/hbc/scopes.rb +++ b/Library/Homebrew/cask/lib/hbc/scopes.rb @@ -10,29 +10,15 @@ module Hbc::Scopes end def all_tapped_cask_dirs - @all_tapped_cask_dirs ||= Tap.names.map(&Tap.method(:fetch)).map(&:cask_dir) - .unshift(default_tap.cask_dir) # optimization: place the default Tap first - .uniq - end - - def reset_all_tapped_cask_dirs - # The memoized value should be reset when a Tap is added/removed - # (which is a rare event in our codebase). - @all_tapped_cask_dirs = nil + Tap.map(&:cask_dir).compact end def all_tokens - cask_tokens = all_tapped_cask_dirs.map { |d| Dir.glob d.join("*.rb") }.flatten - cask_tokens.map { |c| - # => "/usr/local/Library/Taps/caskroom/example-tap/Casks/example.rb" - c.sub!(%r{\.rb$}, "") - # => ".../example" - c = c.split("/").last 4 - # => ["caskroom", "example-tap", "Casks", "example"] - c.delete_at(-2) - # => ["caskroom", "example-tap", "example"] - c.join "/" - } + Tap.map { |t| + t.cask_files.map { |p| + "#{t.name}/#{File.basename(p, ".rb")}" + } + }.flatten end def installed diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 8dd7fd1557..340f6eca31 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -290,13 +290,22 @@ class Tap # path to the directory of all {Cask} files for this {Tap}. def cask_dir - @cask_dir ||= path/"Casks" + @cask_dir ||= [path/"Casks"].detect(&:directory?) end # an array of all {Formula} files of this {Tap}. def formula_files @formula_files ||= if formula_dir - formula_dir.children.select { |p| p.extname == ".rb" } + formula_dir.children.select(&method(:formula_file?)) + else + [] + end + end + + # an array of all {Cask} files of this {Tap}. + def cask_files + @cask_files ||= if cask_dir + cask_dir.children.select(&method(:cask_file?)) else [] end @@ -311,7 +320,7 @@ class Tap file.extname == ".rb" && file.parent == formula_dir end - # return true if given path would present a cask file in this {Tap}. + # return true if given path would present a {Cask} file in this {Tap}. # accepts both absolute path and relative path (relative to this {Tap}'s path) # @private def cask_file?(file)