Class: AbstractDownloadStrategy Abstract Private
- Extended by:
- T::Helpers
- Includes:
- Context, FileUtils, SystemCommand::Mixin, Utils::Output::Mixin
- Defined in:
- download_strategy/abstract_download_strategy.rb
Overview
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
Abstract superclass for all download strategies.
Direct Known Subclasses
AbstractFileDownloadStrategy, Homebrew::API::JSONDownloadStrategy, VCSDownloadStrategy
Constant Summary collapse
- HOMEBREW_CONTROLLED_STRATEGIES =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
T.let([ CurlApacheMirrorDownloadStrategy, CurlDownloadStrategy, CurlGitHubPackagesDownloadStrategy, CurlPostDownloadStrategy, HomebrewCurlDownloadStrategy, NoUnzipCurlDownloadStrategy, PyPIDownloadStrategy, ].freeze, T::Array[T::Class[AbstractDownloadStrategy]])
Instance Attribute Summary collapse
- #cache ⇒ Pathname readonly private
-
#url ⇒ String
readonly
The download URL.
Class Method Summary collapse
Instance Method Summary collapse
- #basename ⇒ Pathname private
-
#cached_location ⇒ Pathname
abstract
Location of the cached download.
-
#clear_cache ⇒ void
Remove #cached_location and any other files associated with the resource from the cache.
-
#fetch(timeout: nil) ⇒ void
Download and cache the resource at #cached_location.
-
#fetched_size ⇒ Integer?
private
Total bytes downloaded if available.
- #initialize(url, name, version, **meta) ⇒ void constructor private
- #ohai(title, *sput) ⇒ void private
-
#quiet! ⇒ void
Disable any output during downloading.
- #quiet? ⇒ Boolean private
-
#source_modified_time ⇒ Time
Returns the most recent modified time for all files in the current working directory after stage.
-
#source_revision ⇒ String?
Return the checked out source revision for version control downloads.
-
#stage(&block) ⇒ void
Unpack #cached_location into the current working directory.
-
#total_size ⇒ Integer?
private
Total download size if available.
Methods included from Utils::Output::Mixin
#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_uninstalled, #pretty_unmarked, #pretty_upgradable, #pretty_warning
Methods included from SystemCommand::Mixin
#system_command, #system_command!
Methods included from Context
current, current=, #debug?, #deferred_environment_expansion?, #verbose?, #with_context
Constructor Details
#initialize(url, name, version, **meta) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
35 36 37 38 39 40 41 42 43 44 45 |
# File 'download_strategy/abstract_download_strategy.rb', line 35 def initialize(url, name, version, **) @cached_location = T.let(nil, T.nilable(Pathname)) @ref_type = T.let(nil, T.nilable(Symbol)) @ref = T.let(nil, T.untyped) @url = url @name = name @version = version @cache = T.let(.fetch(:cache, HOMEBREW_CACHE), Pathname) @meta = @quiet = T.let(false, T.nilable(T::Boolean)) end |
Instance Attribute Details
#cache ⇒ Pathname (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
21 22 23 |
# File 'download_strategy/abstract_download_strategy.rb', line 21 def cache @cache end |
#url ⇒ String (readonly)
The download URL.
18 19 20 |
# File 'download_strategy/abstract_download_strategy.rb', line 18 def url @url end |
Class Method Details
.expand_deferred_environment_for?(downloader) ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
81 82 83 |
# File 'download_strategy/abstract_download_strategy.rb', line 81 def self.(downloader) HOMEBREW_CONTROLLED_STRATEGIES.include?(downloader.class) end |
Instance Method Details
#basename ⇒ Pathname
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
149 150 151 |
# File 'download_strategy/abstract_download_strategy.rb', line 149 def basename cached_location.basename end |
#cached_location ⇒ Pathname
Location of the cached download.
65 |
# File 'download_strategy/abstract_download_strategy.rb', line 65 def cached_location; end |
#clear_cache ⇒ void
This method returns an undefined value.
Remove #cached_location and any other files associated with the resource from the cache.
144 145 146 |
# File 'download_strategy/abstract_download_strategy.rb', line 144 def clear_cache rm_rf(cached_location) end |
#fetch(timeout: nil) ⇒ void
This method returns an undefined value.
Download and cache the resource at #cached_location.
51 |
# File 'download_strategy/abstract_download_strategy.rb', line 51 def fetch(timeout: nil); end |
#fetched_size ⇒ Integer?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Total bytes downloaded if available.
55 |
# File 'download_strategy/abstract_download_strategy.rb', line 55 def fetched_size; end |
#ohai(title, *sput) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
154 155 156 |
# File 'download_strategy/abstract_download_strategy.rb', line 154 def ohai(title, *sput) super unless quiet? end |
#quiet! ⇒ void
This method returns an undefined value.
Disable any output during downloading.
71 72 73 |
# File 'download_strategy/abstract_download_strategy.rb', line 71 def quiet! @quiet = T.let(true, T.nilable(T::Boolean)) end |
#quiet? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
76 77 78 |
# File 'download_strategy/abstract_download_strategy.rb', line 76 def quiet? Context.current.quiet? || @quiet || false end |
#source_modified_time ⇒ Time
Returns the most recent modified time for all files in the current working directory after stage.
129 130 131 |
# File 'download_strategy/abstract_download_strategy.rb', line 129 def source_modified_time Pathname.pwd.to_enum(:find).select(&:file?).map(&:mtime).max end |
#source_revision ⇒ String?
Return the checked out source revision for version control downloads.
137 |
# File 'download_strategy/abstract_download_strategy.rb', line 137 def source_revision; end |
#stage(&block) ⇒ void
This method returns an undefined value.
Unpack #cached_location into the current working directory.
Additionally, if a block is given, the working directory was previously empty and a single directory is extracted from the archive, the block will be called with the working directory changed to that directory. Otherwise this method will return, or the block will be called, without changing the current working directory.
95 96 97 98 99 100 101 102 103 |
# File 'download_strategy/abstract_download_strategy.rb', line 95 def stage(&block) UnpackStrategy.detect(cached_location, prioritize_extension: true, ref_type: @ref_type, ref: @ref) .extract_nestedly(basename:, prioritize_extension: true, verbose: verbose? && !quiet?) chdir(&block) if block end |
#total_size ⇒ Integer?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Total download size if available.
59 |
# File 'download_strategy/abstract_download_strategy.rb', line 59 def total_size; end |