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?, #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.
182 183 184 185 186 187 |
# File 'download_strategy.rb', line 182 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.
223 224 225 226 |
# File 'download_strategy.rb', line 223 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.
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'download_strategy.rb', line 192 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.
218 219 220 221 |
# File 'download_strategy.rb', line 218 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.
228 229 230 |
# File 'download_strategy.rb', line 228 def head? version.respond_to?(:head?) && version.head? end |
#last_commit ⇒ String
Return the most recent modified timestamp.
236 237 238 |
# File 'download_strategy.rb', line 236 def last_commit source_modified_time.to_i.to_s end |