aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/download_strategy.rb19
1 files changed, 18 insertions, 1 deletions
diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb
index 42dde8315..08dfdcd78 100644
--- a/Library/Homebrew/download_strategy.rb
+++ b/Library/Homebrew/download_strategy.rb
@@ -98,11 +98,12 @@ class AbstractDownloadStrategy
end
class VCSDownloadStrategy < AbstractDownloadStrategy
- REF_TYPES = [:branch, :revision, :revisions, :tag].freeze
+ REF_TYPES = [:tag, :branch, :revisions, :revision].freeze
def initialize name, resource
super
@ref_type, @ref = extract_ref(meta)
+ @revision = meta[:revision]
@clone = HOMEBREW_CACHE.join(cache_filename)
end
@@ -119,6 +120,15 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
else
clone_repo
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
def stage
@@ -153,6 +163,9 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
def update
end
+ def current_revision
+ end
+
def extract_ref(specs)
key = REF_TYPES.find { |type| specs.key?(type) }
return key, specs[key]
@@ -570,6 +583,10 @@ class GitDownloadStrategy < VCSDownloadStrategy
quiet_system 'git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "#{@ref}^{commit}"
end
+ def current_revision
+ Utils.popen_read('git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "HEAD").strip
+ end
+
def repo_valid?
quiet_system "git", "--git-dir", git_dir, "status", "-s"
end