diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index c11c503e38..4f71189c9b 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -31,9 +31,6 @@ #: #: If `--except-cops` is passed, the given Rubocop cop(s)' checks would be skipped. #: -#: If `--commit-range` is is passed, the audited Formula will be compared to the -#: last revision before the ``. -#: #: `audit` exits with a non-zero status if any errors are found. This is useful, #: for instance, for implementing pre-commit hooks. @@ -651,25 +648,9 @@ class FormulaAuditor problem "Devel-only (no stable download)" end - previous_formula_contents = unless formula.tap.nil? - commit_range = ARGV.value("commit-range") - Git.last_revision_of_file(formula.tap.path, formula.path, before_commit: commit_range) - end - previous_formula = unless (previous_formula_contents || "").empty? - Formulary.from_contents(formula.name, formula.path, previous_formula_contents) - end - %w[Stable Devel HEAD].each do |name| next unless spec = formula.send(name.downcase) - unless previous_formula.nil? - previous_spec = previous_formula.send(name.downcase) - - if previous_spec.version == spec.version && previous_spec.checksum != spec.checksum - problem "#{name}: only sha256 changed; needs to be confirmed by the developer" - end - end - ra = ResourceAuditor.new(spec, online: @online, strict: @strict).audit problems.concat ra.problems.map { |problem| "#{name}: #{problem}" } @@ -765,6 +746,15 @@ class FormulaAuditor return if @new_formula fv = FormulaVersions.new(formula) + + previous_version_and_checksum = fv.previous_version_and_checksum("origin/master") + [:stable, :devel].each do |spec_sym| + next unless spec = formula.send(spec_sym) + next unless previous_version_and_checksum[spec_sym][:version] == spec.version + next if previous_version_and_checksum[spec_sym][:checksum] == spec.checksum + problem "#{spec_sym}: only sha256 changed; needs to be confirmed by the developer" + end + attributes = [:revision, :version_scheme] attributes_map = fv.version_attributes_map(attributes, "origin/master") diff --git a/Library/Homebrew/formula_versions.rb b/Library/Homebrew/formula_versions.rb index 70706a2f01..5c4e0ecc96 100644 --- a/Library/Homebrew/formula_versions.rb +++ b/Library/Homebrew/formula_versions.rb @@ -63,6 +63,26 @@ class FormulaVersions map end + def previous_version_and_checksum(branch) + map = {} + + rev_list(branch) do |rev| + formula_at_revision(rev) do |f| + [:stable, :devel].each do |spec_sym| + next unless spec = f.send(spec_sym) + map[spec_sym] ||= { version: spec.version, checksum: spec.checksum } + end + + break if map[:stable] && map[:devel] + end + end + + map[:stable] ||= {} + map[:devel] ||= {} + + map + end + def version_attributes_map(attributes, branch) attributes_map = {} return attributes_map if attributes.empty? diff --git a/docs/Manpage.md b/docs/Manpage.md index fa8a7572a0..2dac894434 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -643,9 +643,6 @@ With `--verbose` or `-v`, many commands print extra debugging information. Note If `--except-cops` is passed, the given Rubocop cop(s)' checks would be skipped. - If `--commit-range` is is passed, the audited Formula will be compared to the - last revision before the ``commit_range``. - `audit` exits with a non-zero status if any errors are found. This is useful, for instance, for implementing pre-commit hooks. diff --git a/manpages/brew.1 b/manpages/brew.1 index c4006ef470..ca11439a64 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -674,9 +674,6 @@ If \fB\-\-only\-cops\fR is passed, only the given Rubocop cop(s)\' violations wo If \fB\-\-except\-cops\fR is passed, the given Rubocop cop(s)\' checks would be skipped\. . .IP -If \fB\-\-commit\-range\fR is is passed, the audited Formula will be compared to the last revision before the \fB\fR\. -. -.IP \fBaudit\fR exits with a non\-zero status if any errors are found\. This is useful, for instance, for implementing pre\-commit hooks\. . .TP