download_strategy: raise on wrong tag revision.
Adds some added security to Git tags so we are able to provide an effective checksum rather than letting them be changed without our knowing. Also: - Reprioritise ref_types. Tag should take priority over branch and revisions over a single one. - Add current_revision method. Used to verify the current repository revision matches the specified revision. Currently only implemented for Git.
This commit is contained in:
parent
5206a2523e
commit
b6a0105b7e
@ -98,11 +98,12 @@ class AbstractDownloadStrategy
|
|||||||
end
|
end
|
||||||
|
|
||||||
class VCSDownloadStrategy < AbstractDownloadStrategy
|
class VCSDownloadStrategy < AbstractDownloadStrategy
|
||||||
REF_TYPES = [:branch, :revision, :revisions, :tag].freeze
|
REF_TYPES = [:tag, :branch, :revisions, :revision].freeze
|
||||||
|
|
||||||
def initialize name, resource
|
def initialize name, resource
|
||||||
super
|
super
|
||||||
@ref_type, @ref = extract_ref(meta)
|
@ref_type, @ref = extract_ref(meta)
|
||||||
|
@revision = meta[:revision]
|
||||||
@clone = HOMEBREW_CACHE.join(cache_filename)
|
@clone = HOMEBREW_CACHE.join(cache_filename)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -119,6 +120,15 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
|
|||||||
else
|
else
|
||||||
clone_repo
|
clone_repo
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if @ref_type == :tag && @revision && current_revision
|
||||||
|
unless current_revision == @revision
|
||||||
|
raise <<-EOS.undent
|
||||||
|
#{@ref} tag should be #{@revision}
|
||||||
|
but is actually #{current_revision}!
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def stage
|
def stage
|
||||||
@ -153,6 +163,9 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
|
|||||||
def update
|
def update
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def current_revision
|
||||||
|
end
|
||||||
|
|
||||||
def extract_ref(specs)
|
def extract_ref(specs)
|
||||||
key = REF_TYPES.find { |type| specs.key?(type) }
|
key = REF_TYPES.find { |type| specs.key?(type) }
|
||||||
return key, specs[key]
|
return key, specs[key]
|
||||||
@ -570,6 +583,10 @@ class GitDownloadStrategy < VCSDownloadStrategy
|
|||||||
quiet_system 'git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "#{@ref}^{commit}"
|
quiet_system 'git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "#{@ref}^{commit}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def current_revision
|
||||||
|
Utils.popen_read('git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "HEAD").strip
|
||||||
|
end
|
||||||
|
|
||||||
def repo_valid?
|
def repo_valid?
|
||||||
quiet_system "git", "--git-dir", git_dir, "status", "-s"
|
quiet_system "git", "--git-dir", git_dir, "status", "-s"
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user