diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index ceac979995011f..292962452e3a0c 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -4237,12 +4237,10 @@ def pour_bottle?(only_if: nil, &block) # @see https://docs.brew.sh/Deprecating-Disabling-and-Removing-Formulae # @see DeprecateDisable::FORMULA_DEPRECATE_DISABLE_REASONS # @api public - def deprecate!(date:, because:) + def deprecate!(date:, because: nil) @deprecation_date = Date.parse(date) - return if @deprecation_date > Date.today - - @deprecation_reason = because - @deprecated = true + @deprecated = !disabled? && @deprecation_date <= Date.today + @deprecation_reason = @deprecated ? (because || @deprecation_reason) : nil end # Whether this {Formula} is deprecated (i.e. warns on installation). diff --git a/Library/Homebrew/rubocops/deprecate_disable.rb b/Library/Homebrew/rubocops/deprecate_disable.rb index 127ec5de57facf..eb3e6f024ccdd6 100644 --- a/Library/Homebrew/rubocops/deprecate_disable.rb +++ b/Library/Homebrew/rubocops/deprecate_disable.rb @@ -45,8 +45,9 @@ class DeprecateDisableReason < FormulaCop sig { override.params(formula_nodes: FormulaNodes).void } def audit_formula(formula_nodes) body_node = formula_nodes.body_node + any_reason_found = T.let(false, T::Boolean) - [:deprecate!, :disable!].each do |method| + [:disable!, :deprecate!].each do |method| node = find_node_method_by_name(body_node, method) next if node.nil? @@ -72,7 +73,7 @@ def audit_formula(formula_nodes) end end - next if reason_found + next if any_reason_found ||= reason_found case method when :deprecate! diff --git a/Library/Homebrew/test/rubocops/deprecate_disable/reason_spec.rb b/Library/Homebrew/test/rubocops/deprecate_disable/reason_spec.rb index 067c8c4bed0070..65b726d6c337a9 100644 --- a/Library/Homebrew/test/rubocops/deprecate_disable/reason_spec.rb +++ b/Library/Homebrew/test/rubocops/deprecate_disable/reason_spec.rb @@ -324,4 +324,16 @@ class Foo < Formula RUBY end end + + context "when auditing `deprecate!` and `disable!`" do + it "reports no offense if `reason` exists on `deprecate!` but is absent on `disable!`" do + expect_no_offenses(<<~RUBY) + class Foo < Formula + url 'https://brew.sh/foo-1.0.tgz' + disable! date: "2021-08-28", because: :does_not_build + deprecate! date: "2020-08-28" + end + RUBY + end + end end