diff options
| author | Markus Reiter | 2017-08-05 16:54:26 +0200 |
|---|---|---|
| committer | GitHub | 2017-08-05 16:54:26 +0200 |
| commit | c26c9204fa48c8d2bfa3837193eaf2a82b611fa6 (patch) | |
| tree | 554f6fdc4dadb8cabf51394fc41e0c42ccf81f6b /Library/Homebrew/cask/lib | |
| parent | ae0b7cb824cfd0fa08fda1d2c0d0dd53b3c4adaa (diff) | |
| parent | 6d6ce7cf0a530b47a557ea748de9702420f6fab4 (diff) | |
| download | brew-c26c9204fa48c8d2bfa3837193eaf2a82b611fa6.tar.bz2 | |
Merge pull request #2965 from reitermarkus/cask-tap
Detect `Tap` in `CaskLoader`.
Diffstat (limited to 'Library/Homebrew/cask/lib')
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cask.rb | 9 | ||||
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cask_loader.rb | 52 |
2 files changed, 45 insertions, 16 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/cask.rb b/Library/Homebrew/cask/lib/hbc/cask.rb index 672d18954..6d89a997c 100644 --- a/Library/Homebrew/cask/lib/hbc/cask.rb +++ b/Library/Homebrew/cask/lib/hbc/cask.rb @@ -7,9 +7,16 @@ module Hbc include Metadata attr_reader :token, :sourcefile_path - def initialize(token, sourcefile_path: nil, &block) + + def tap + return super if block_given? # Object#tap + @tap + end + + def initialize(token, sourcefile_path: nil, tap: nil, &block) @token = token @sourcefile_path = sourcefile_path + @tap = tap @dsl = DSL.new(@token) return unless block_given? @dsl.instance_eval(&block) diff --git a/Library/Homebrew/cask/lib/hbc/cask_loader.rb b/Library/Homebrew/cask/lib/hbc/cask_loader.rb index 8cd010ef6..500314671 100644 --- a/Library/Homebrew/cask/lib/hbc/cask_loader.rb +++ b/Library/Homebrew/cask/lib/hbc/cask_loader.rb @@ -13,8 +13,8 @@ module Hbc private - def cask(header_token, &block) - Cask.new(header_token, &block) + def cask(header_token, **options, &block) + Cask.new(header_token, **options, &block) end end @@ -45,12 +45,12 @@ module Hbc private - def cask(header_token, &block) + def cask(header_token, **options, &block) if token != header_token raise CaskTokenMismatchError.new(token, header_token) end - Cask.new(header_token, sourcefile_path: path, &block) + super(header_token, **options, sourcefile_path: path, &block) end end @@ -80,18 +80,33 @@ module Hbc end end - class FromTapLoader < FromPathLoader + class FromTapPathLoader < FromPathLoader def self.can_load?(ref) - ref.to_s.match?(HOMEBREW_TAP_CASK_REGEX) + ref.to_s.match?(HOMEBREW_TAP_PATH_REGEX) && super end attr_reader :tap + def initialize(tap_path) + @tap = Tap.from_path(tap_path) + super tap_path + end + + private + + def cask(*args, &block) + super(*args, tap: tap, &block) + end + end + + class FromTapLoader < FromTapPathLoader + def self.can_load?(ref) + ref.to_s.match?(HOMEBREW_TAP_CASK_REGEX) + end + def initialize(tapped_name) user, repo, token = tapped_name.split("/", 3) - @tap = Tap.fetch(user, repo) - - super @tap.cask_dir/"#{token}.rb" + super Tap.fetch(user, repo).cask_dir/"#{token}.rb" end def load @@ -136,19 +151,26 @@ module Hbc [ FromURILoader, FromTapLoader, + FromTapPathLoader, FromPathLoader, ].each do |loader_class| return loader_class.new(ref) if loader_class.can_load?(ref) end - if FromPathLoader.can_load?(default_path(ref)) - return FromPathLoader.new(default_path(ref)) + if FromTapPathLoader.can_load?(default_path(ref)) + return FromTapPathLoader.new(default_path(ref)) end - possible_tap_casks = tap_paths(ref) - if possible_tap_casks.count == 1 - possible_tap_cask = possible_tap_casks.first - return FromPathLoader.new(possible_tap_cask) + case (possible_tap_casks = tap_paths(ref)).count + when 1 + return FromTapPathLoader.new(possible_tap_casks.first) + when 2..Float::INFINITY + loaders = possible_tap_casks.map(&FromTapPathLoader.method(:new)) + + raise CaskError, <<-EOS.undent + Cask #{ref} exists in multiple taps: + #{loaders.map { |loader| " #{loader.tap}/#{loader.token}" }.join("\n")} + EOS end possible_installed_cask = Cask.new(ref) |
