Add compatibility layer for AbstractDownloadStrategy#fetch.

This commit is contained in:
Markus Reiter 2021-03-24 09:04:49 +01:00
parent cdcd216237
commit b6ed8915e5
No known key found for this signature in database
GPG Key ID: 245293B51702655B
7 changed files with 42 additions and 11 deletions

View File

@ -1,2 +1,4 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
require "compat/download_strategy"

View File

@ -0,0 +1,26 @@
# typed: false
# frozen_string_literal: true
class AbstractDownloadStrategy
module Compat
def fetch(timeout: nil)
super()
end
end
class << self
def method_added(method)
if method == :fetch && instance_method(method).arity.zero?
odeprecated "`def fetch` in a subclass of #{self}",
"`def fetch(timeout: nil, **options)` and output a warning " \
"when `options` contains new unhandled options"
class_eval do
prepend Compat
end
end
super
end
end
end

View File

@ -455,7 +455,7 @@ end
class GitHubArtifactDownloadStrategy < AbstractFileDownloadStrategy class GitHubArtifactDownloadStrategy < AbstractFileDownloadStrategy
extend T::Sig extend T::Sig
def fetch def fetch(timeout: nil)
ohai "Downloading #{url}" ohai "Downloading #{url}"
if cached_location.exist? if cached_location.exist?
puts "Already downloaded: #{cached_location}" puts "Already downloaded: #{cached_location}"
@ -463,7 +463,8 @@ class GitHubArtifactDownloadStrategy < AbstractFileDownloadStrategy
begin begin
curl "--location", "--create-dirs", "--output", temporary_path, url, curl "--location", "--create-dirs", "--output", temporary_path, url,
*meta.fetch(:curl_args, []), *meta.fetch(:curl_args, []),
secrets: meta.fetch(:secrets, []) secrets: meta.fetch(:secrets, []),
timeout: timeout
rescue ErrorDuringExecution rescue ErrorDuringExecution
raise CurlDownloadStrategyError, url raise CurlDownloadStrategyError, url
end end

View File

@ -1,6 +1,7 @@
# typed: true # typed: true
# frozen_string_literal: true # frozen_string_literal: true
require "context"
require "resource" require "resource"
require "metafiles" require "metafiles"

View File

@ -4,6 +4,7 @@
require_relative "load_path" require_relative "load_path"
require "English" require "English"
require "fileutils"
require "json" require "json"
require "json/add/exception" require "json/add/exception"
require "pathname" require "pathname"
@ -39,8 +40,6 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular "it", "they" inflect.irregular "it", "they"
end end
require "utils/sorbet"
HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ENV["HOMEBREW_BOTTLE_DEFAULT_DOMAIN"] HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ENV["HOMEBREW_BOTTLE_DEFAULT_DOMAIN"]
HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ENV["HOMEBREW_BREW_DEFAULT_GIT_REMOTE"] HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ENV["HOMEBREW_BREW_DEFAULT_GIT_REMOTE"]
HOMEBREW_CORE_DEFAULT_GIT_REMOTE = ENV["HOMEBREW_CORE_DEFAULT_GIT_REMOTE"] HOMEBREW_CORE_DEFAULT_GIT_REMOTE = ENV["HOMEBREW_CORE_DEFAULT_GIT_REMOTE"]
@ -73,10 +72,11 @@ HOMEBREW_PULL_OR_COMMIT_URL_REGEX =
%r[https://github\.com/([\w-]+)/([\w-]+)?/(?:pull/(\d+)|commit/[0-9a-fA-F]{4,40})].freeze %r[https://github\.com/([\w-]+)/([\w-]+)?/(?:pull/(\d+)|commit/[0-9a-fA-F]{4,40})].freeze
HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze
require "fileutils" require "utils/sorbet"
require "os"
require "env_config" require "env_config"
require "compat" unless Homebrew::EnvConfig.no_compat?
require "os"
require "messages" require "messages"
module Homebrew module Homebrew
@ -152,7 +152,5 @@ require "official_taps"
require "tap" require "tap"
require "tap_constants" require "tap_constants"
require "compat" unless Homebrew::EnvConfig.no_compat?
# Enables `patchelf.rb` write support. # Enables `patchelf.rb` write support.
HOMEBREW_PATCHELF_RB_WRITE = ENV["HOMEBREW_NO_PATCHELF_RB_WRITE"].blank?.freeze HOMEBREW_PATCHELF_RB_WRITE = ENV["HOMEBREW_NO_PATCHELF_RB_WRITE"].blank?.freeze

View File

@ -1,6 +1,8 @@
# typed: false # typed: false
# frozen_string_literal: true # frozen_string_literal: true
require "time"
require "utils/analytics" require "utils/analytics"
require "utils/curl" require "utils/curl"
require "utils/fork" require "utils/fork"
@ -16,7 +18,6 @@ require "utils/repology"
require "utils/svn" require "utils/svn"
require "utils/tty" require "utils/tty"
require "tap_constants" require "tap_constants"
require "time"
module Homebrew module Homebrew
extend Context extend Context
@ -206,7 +207,7 @@ module Kernel
# Don't throw deprecations at all for cached, .brew or .metadata files. # Don't throw deprecations at all for cached, .brew or .metadata files.
return if backtrace.any? do |line| return if backtrace.any? do |line|
next true if line.include?(HOMEBREW_CACHE) next true if line.include?(HOMEBREW_CACHE.to_s)
next true if line.include?("/.brew/") next true if line.include?("/.brew/")
next true if line.include?("/.metadata/") next true if line.include?("/.metadata/")

View File

@ -630,7 +630,9 @@ If you need more control over the way files are downloaded and staged, you can c
```ruby ```ruby
class MyDownloadStrategy < SomeHomebrewDownloadStrategy class MyDownloadStrategy < SomeHomebrewDownloadStrategy
def fetch def fetch(timeout: nil, **options)
opoo "Unhandled options in #{self.class}#fetch: #{options.keys.join(", ")}" unless options.empty?
# downloads output to `temporary_path` # downloads output to `temporary_path`
end end
end end