diff options
| author | Markus Reiter | 2017-07-29 16:27:54 +0200 | 
|---|---|---|
| committer | Markus Reiter | 2017-07-30 14:22:05 +0200 | 
| commit | 6d6ce7cf0a530b47a557ea748de9702420f6fab4 (patch) | |
| tree | 16acaefac8808de62b20d50e5c77282c18e3c674 | |
| parent | 627b1dae707b4b5ea5e299ff12dd8ac1abbfa056 (diff) | |
| download | brew-6d6ce7cf0a530b47a557ea748de9702420f6fab4.tar.bz2 | |
Detect `Tap` in `CaskLoader`.
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cask.rb | 9 | ||||
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cask_loader.rb | 52 | ||||
| -rw-r--r-- | Library/Homebrew/compat/hbc/cask_loader.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/exceptions.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/formula.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/tap.rb | 6 | ||||
| -rw-r--r-- | Library/Homebrew/tap_constants.rb | 2 | 
7 files changed, 55 insertions, 26 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) diff --git a/Library/Homebrew/compat/hbc/cask_loader.rb b/Library/Homebrew/compat/hbc/cask_loader.rb index e6cb65b4f..e57aea71d 100644 --- a/Library/Homebrew/compat/hbc/cask_loader.rb +++ b/Library/Homebrew/compat/hbc/cask_loader.rb @@ -1,13 +1,13 @@  module CaskLoaderCompatibilityLayer    private -  def cask(header_token, &block) +  def cask(header_token, **options, &block)      if header_token.is_a?(Hash) && header_token.key?(:v1)        odeprecated %q("cask :v1 => 'token'"), %q("cask 'token'")        header_token = header_token[:v1]      end -    super(header_token, &block) +    super(header_token, **options, &block)    end  end diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index 23a123c44..8b4cddc59 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -181,8 +181,8 @@ class TapFormulaAmbiguityError < RuntimeError      @name = name      @paths = paths      @formulae = paths.map do |path| -      path.to_s =~ HOMEBREW_TAP_PATH_REGEX -      "#{Tap.fetch(Regexp.last_match(1), Regexp.last_match(2))}/#{path.basename(".rb")}" +      match = path.to_s.match(HOMEBREW_TAP_PATH_REGEX) +      "#{Tap.fetch(match[:user], match[:repo])}/#{path.basename(".rb")}"      end      super <<-EOS.undent diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 9a31c9e5e..e8e3fa9eb 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -177,8 +177,8 @@ class Formula      @tap = if path == Formulary.core_path(name)        CoreTap.instance -    elsif path.to_s =~ HOMEBREW_TAP_PATH_REGEX -      Tap.fetch(Regexp.last_match(1), Regexp.last_match(2)) +    elsif match = path.to_s.match(HOMEBREW_TAP_PATH_REGEX) +      Tap.fetch(match[:user], match[:repo])      end      @full_name = full_name_with_optional_tap(name) diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 7990acc5d..34bcbfc31 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -42,9 +42,9 @@ class Tap    end    def self.from_path(path) -    path.to_s =~ HOMEBREW_TAP_PATH_REGEX -    raise "Invalid tap path '#{path}'" unless Regexp.last_match(1) -    fetch(Regexp.last_match(1), Regexp.last_match(2)) +    match = path.to_s.match(HOMEBREW_TAP_PATH_REGEX) +    raise "Invalid tap path '#{path}'" unless match +    fetch(match[:user], match[:repo])    rescue      # No need to error as a nil tap is sufficient to show failure.      nil diff --git a/Library/Homebrew/tap_constants.rb b/Library/Homebrew/tap_constants.rb index 773eff816..23bbc61ed 100644 --- a/Library/Homebrew/tap_constants.rb +++ b/Library/Homebrew/tap_constants.rb @@ -3,7 +3,7 @@ HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}  # match taps' casks, e.g. someuser/sometap/somecask  HOMEBREW_TAP_CASK_REGEX = %r{^([\w-]+)/([\w-]+)/([a-z0-9\-]+)$}  # match taps' directory paths, e.g. HOMEBREW_LIBRARY/Taps/someuser/sometap -HOMEBREW_TAP_DIR_REGEX = %r{#{Regexp.escape(HOMEBREW_LIBRARY)}/Taps/([\w-]+)/([\w-]+)} +HOMEBREW_TAP_DIR_REGEX = %r{#{Regexp.escape(HOMEBREW_LIBRARY)}/Taps/(?<user>[\w-]+)/(?<repo>[\w-]+)}  # match taps' formula paths, e.g. HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula  HOMEBREW_TAP_PATH_REGEX = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + %r{/(.*)}.source)  # match the default and the versions brew-cask tap e.g. Caskroom/cask or Caskroom/versions | 
