Class: VCSDownloadStrategy Abstract Private
- Inherits:
-
AbstractDownloadStrategy
- Object
- AbstractDownloadStrategy
- VCSDownloadStrategy
- Defined in:
- download_strategy/vcs_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 from a version control system.
Direct Known Subclasses
BazaarDownloadStrategy, CVSDownloadStrategy, FossilDownloadStrategy, GitDownloadStrategy, MercurialDownloadStrategy, SubversionDownloadStrategy
Constant Summary collapse
- REF_TYPES =
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.
[:tag, :branch, :revisions, :revision].freeze
Constants inherited from AbstractDownloadStrategy
AbstractDownloadStrategy::HOMEBREW_CONTROLLED_STRATEGIES
Instance Attribute Summary collapse
- #cached_location ⇒ Pathname readonly private
Attributes inherited from AbstractDownloadStrategy
Instance Method Summary collapse
- #command_sandbox ⇒ Sandbox? private
- #commit_outdated?(commit) ⇒ Boolean private
-
#fetch(timeout: nil) ⇒ void
Download and cache the repository at #cached_location.
- #fetch_last_commit ⇒ String private
- #fetching? ⇒ Boolean private
- #head? ⇒ Boolean private
- #initialize(url, name, version, **meta) ⇒ void constructor private
-
#last_commit ⇒ String
Return the most recent modified timestamp.
- #sandbox_write_path ⇒ Pathname private
Methods inherited from AbstractDownloadStrategy
#basename, #chdir, #clear_cache, expand_deferred_environment_for?, #fetched_size, #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_once, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_cannot_install, #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?, #quiet?, #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.
16 17 18 19 20 21 22 23 24 |
# File 'download_strategy/vcs_download_strategy.rb', line 16 def initialize(url, name, version, **) super extracted_ref = extract_ref() @ref_type = T.let(extracted_ref.fetch(0), T.nilable(Symbol)) @ref = T.let(extracted_ref.fetch(1), T.untyped) @revision = T.let([:revision], T.nilable(String)) @cached_location = T.let(@cache/Utils.safe_filename("#{name}--#{cache_tag}"), Pathname) @fetching = T.let(false, T::Boolean) end |
Instance Attribute Details
#cached_location ⇒ 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.
11 12 13 |
# File 'download_strategy/vcs_download_strategy.rb', line 11 def cached_location @cached_location end |
Instance Method Details
#command_sandbox ⇒ Sandbox?
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.
82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'download_strategy/vcs_download_strategy.rb', line 82 def command_sandbox return unless Sandbox.isolate_operation? # Reject symlinks before the sandbox resolves its writable paths. if cached_location.symlink? || sandbox_write_path.symlink? raise "VCS download path is a symlink: #{cached_location}" end Sandbox.for_operation(write_paths: [sandbox_write_path], network_access: fetching?, home_read_exception: (fetch_home_read_exception if fetching?)).tap do |sandbox| allow_fetch_credentials(sandbox) if fetching? end end |
#commit_outdated?(commit) ⇒ 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.
67 68 69 70 |
# File 'download_strategy/vcs_download_strategy.rb', line 67 def commit_outdated?(commit) @last_commit ||= T.let(fetch_last_commit, T.nilable(String)) commit != @last_commit end |
#fetch(timeout: nil) ⇒ void
This method returns an undefined value.
Download and cache the repository at #cached_location.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'download_strategy/vcs_download_strategy.rb', line 30 def fetch(timeout: nil) @fetching = true end_time = Time.now + timeout if timeout ohai "Cloning #{url}" if cached_location.exist? && repo_valid? puts "Updating #{cached_location}" update(timeout: end_time) elsif cached_location.exist? puts "Removing invalid repository from cache" clear_cache clone_repo(timeout: end_time) else clone_repo(timeout: end_time) end v = version v.update_commit(last_commit) if v.is_a?(Version) && head? return if @ref_type != :tag || @revision.blank? || current_revision.blank? || current_revision == @revision raise <<~EOS #{@ref} tag should be #{@revision} but is actually #{current_revision} EOS ensure @fetching = false end |
#fetch_last_commit ⇒ String
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.
61 62 63 64 |
# File 'download_strategy/vcs_download_strategy.rb', line 61 def fetch_last_commit fetch last_commit end |
#fetching? ⇒ 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.
79 |
# File 'download_strategy/vcs_download_strategy.rb', line 79 def fetching? = @fetching |
#head? ⇒ 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.
73 74 75 76 |
# File 'download_strategy/vcs_download_strategy.rb', line 73 def head? v = version v.is_a?(Version) ? v.head? : false end |
#last_commit ⇒ String
Return the most recent modified timestamp.
103 104 105 |
# File 'download_strategy/vcs_download_strategy.rb', line 103 def last_commit source_modified_time.to_i.to_s end |
#sandbox_write_path ⇒ 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.
97 |
# File 'download_strategy/vcs_download_strategy.rb', line 97 def sandbox_write_path = cached_location |