Class: VCSDownloadStrategy Abstract Private
- Inherits:
-
AbstractDownloadStrategy
- Object
- AbstractDownloadStrategy
- VCSDownloadStrategy
- Defined in:
- 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
Instance Attribute Summary collapse
- #cached_location ⇒ Pathname readonly private
Attributes inherited from AbstractDownloadStrategy
Instance Method Summary collapse
- #commit_outdated?(commit) ⇒ Boolean private
-
#fetch(timeout: nil) ⇒ void
Download and cache the repository at #cached_location.
- #fetch_last_commit ⇒ String private
- #head? ⇒ Boolean private
- #initialize(url, name, version, **meta) ⇒ void constructor private
-
#last_commit ⇒ String
Return the most recent modified timestamp.
Methods inherited from AbstractDownloadStrategy
#basename, #clear_cache, #quiet!, #quiet?, #source_modified_time, #stage
Methods included from SystemCommand::Mixin
#system_command, #system_command!
Methods included from Context
current, current=, #debug?, #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.
218 219 220 221 222 223 224 225 |
# File 'download_strategy.rb', line 218 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) 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.
213 214 215 |
# File 'download_strategy.rb', line 213 def cached_location @cached_location end |
Instance Method Details
#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.
265 266 267 268 |
# File 'download_strategy.rb', line 265 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.
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'download_strategy.rb', line 231 def fetch(timeout: nil) 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 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.
259 260 261 262 |
# File 'download_strategy.rb', line 259 def fetch_last_commit fetch last_commit end |
#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.
271 272 273 274 |
# File 'download_strategy.rb', line 271 def head? v = version v.is_a?(Version) ? v.head? : false end |
#last_commit ⇒ String
Return the most recent modified timestamp.
280 281 282 |
# File 'download_strategy.rb', line 280 def last_commit source_modified_time.to_i.to_s end |