Class: AbstractFileDownloadStrategy Abstract Private
- Inherits:
-
AbstractDownloadStrategy
- Object
- AbstractDownloadStrategy
- AbstractFileDownloadStrategy
- Defined in:
- download_strategy/abstract_file_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 downloading a single file.
Direct Known Subclasses
CurlDownloadStrategy, GitHubArtifactDownloadStrategy, LocalBottleDownloadStrategy
Instance Attribute Summary
Attributes inherited from AbstractDownloadStrategy
Instance Method Summary collapse
- #basename ⇒ Pathname private
-
#cached_location ⇒ Pathname
Path for storing the completed download.
- #create_symlink_to_cached_download(target_cached_location) ⇒ void private
- #fetched_size ⇒ Integer? private
-
#symlink_location ⇒ Pathname
Path of the symlink (whose name includes the resource name, version and extension) pointing to #cached_location.
-
#temporary_path ⇒ Pathname
Path for storing an incomplete download while the download is still in progress.
Methods inherited from AbstractDownloadStrategy
#clear_cache, #fetch, #initialize, #ohai, #quiet!, #quiet?, #source_modified_time, #source_revision, #stage, #total_size
Methods included from Utils::Output::Mixin
#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_outdated, #pretty_uninstalled, #pretty_upgradable
Methods included from SystemCommand::Mixin
#system_command, #system_command!
Methods included from Context
current, current=, #debug?, #quiet?, #verbose?, #with_context
Constructor Details
This class inherits a constructor from AbstractDownloadStrategy
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.
56 57 58 |
# File 'download_strategy/abstract_file_download_strategy.rb', line 56 def basename cached_location.basename.sub(/^[\da-f]{64}--/, "") end |
#cached_location ⇒ Pathname
Path for storing the completed download.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'download_strategy/abstract_file_download_strategy.rb', line 33 def cached_location return @cached_location if @cached_location url_sha256 = Digest::SHA256.hexdigest(url) downloads = Pathname.glob(HOMEBREW_CACHE/"downloads/#{url_sha256}--*") .reject { |path| path.extname.end_with?(".incomplete") } @cached_location = T.let( if downloads.one? downloads.fetch(0) else HOMEBREW_CACHE/"downloads/#{url_sha256}--#{Utils.safe_filename(resolved_basename)}" end, T.nilable(Pathname) ) T.must(@cached_location) end |
#create_symlink_to_cached_download(target_cached_location) ⇒ 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.
61 62 63 64 |
# File 'download_strategy/abstract_file_download_strategy.rb', line 61 def create_symlink_to_cached_download(target_cached_location) symlink_location.dirname.mkpath FileUtils.ln_s target_cached_location.relative_path_from(symlink_location.dirname), symlink_location, force: true 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.
51 52 53 |
# File 'download_strategy/abstract_file_download_strategy.rb', line 51 def fetched_size File.size?(temporary_path) || File.size?(cached_location) end |
#symlink_location ⇒ Pathname
Path of the symlink (whose name includes the resource name, version and extension) pointing to #cached_location.
21 22 23 24 25 26 27 |
# File 'download_strategy/abstract_file_download_strategy.rb', line 21 def symlink_location return T.must(@symlink_location) if defined?(@symlink_location) ext = Pathname(parse_basename(url)).extname @symlink_location = T.let(@cache/Utils.safe_filename("#{name}--#{version}#{ext}"), T.nilable(Pathname)) T.must(@symlink_location) end |
#temporary_path ⇒ Pathname
Path for storing an incomplete download while the download is still in progress.
12 13 14 |
# File 'download_strategy/abstract_file_download_strategy.rb', line 12 def temporary_path @temporary_path ||= T.let(Pathname.new("#{cached_location}.incomplete"), T.nilable(Pathname)) end |