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
Attributes inherited from AbstractDownloadStrategy
#cache, #cached_location, #url
Instance Method Summary collapse
- #commit_outdated?(commit) ⇒ Boolean private
-
#fetch(timeout: nil) ⇒ Object
Download and cache the repository at AbstractDownloadStrategy#cached_location.
- #fetch_last_commit ⇒ Object private
- #head? ⇒ Boolean private
-
#initialize(url, name, version, **meta) ⇒ VCSDownloadStrategy
constructor
private
A new instance of VCSDownloadStrategy.
-
#last_commit ⇒ String
Return the most recent modified timestamp.
Methods inherited from AbstractDownloadStrategy
#basename, #clear_cache, #quiet!, #quiet?, #shutup!, #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) ⇒ VCSDownloadStrategy
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.
Returns a new instance of VCSDownloadStrategy.
186 187 188 189 190 191 |
# File 'download_strategy.rb', line 186 def initialize(url, name, version, **) super @ref_type, @ref = extract_ref() @revision = [:revision] @cached_location = @cache/Utils.safe_filename("#{name}--#{cache_tag}") 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.
227 228 229 230 |
# File 'download_strategy.rb', line 227 def commit_outdated?(commit) @last_commit ||= fetch_last_commit commit != @last_commit end |
#fetch(timeout: nil) ⇒ Object
Download and cache the repository at AbstractDownloadStrategy#cached_location.
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'download_strategy.rb', line 196 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 version.update_commit(last_commit) if 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 ⇒ Object
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.
222 223 224 225 |
# File 'download_strategy.rb', line 222 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.
232 233 234 |
# File 'download_strategy.rb', line 232 def head? version.respond_to?(:head?) && version.head? end |
#last_commit ⇒ String
Return the most recent modified timestamp.
240 241 242 |
# File 'download_strategy.rb', line 240 def last_commit source_modified_time.to_i.to_s end |