Skip to content

Commit

Permalink
Merge pull request #3696 from alyssais/prepend
Browse files Browse the repository at this point in the history
`prepend` instead of alias hacks for deprecations
  • Loading branch information
MikeMcQuaid authored Jan 19, 2018
2 parents 02e4cae + 78c8297 commit 985202c
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 78 deletions.
1 change: 1 addition & 0 deletions Library/Homebrew/compat.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
require "compat/hbc"
require "compat/formula"
require "compat/formula_specialties"
require "compat/formula_support"
require "compat/global"
require "compat/hardware"
require "compat/macos"
Expand Down
134 changes: 68 additions & 66 deletions Library/Homebrew/compat/dependency_collector.rb
Original file line number Diff line number Diff line change
@@ -1,80 +1,82 @@
require "dependency_collector"

class DependencyCollector
alias _parse_string_spec parse_string_spec
module Compat
# Define the languages that we can handle as external dependencies.
LANGUAGE_MODULES = Set[
:lua, :lua51, :perl, :python, :python3, :ruby
].freeze

# Define the languages that we can handle as external dependencies.
LANGUAGE_MODULES = Set[
:lua, :lua51, :perl, :python, :python3, :ruby
].freeze
def parse_string_spec(spec, tags)
if (tag = tags.first) && LANGUAGE_MODULES.include?(tag)
odeprecated "'depends_on ... => #{tag.inspect}'"
LanguageModuleRequirement.new(tag, spec, tags[1])
else
super
end
end

def parse_string_spec(spec, tags)
if (tag = tags.first) && LANGUAGE_MODULES.include?(tag)
odeprecated "'depends_on :#{tag}'"
LanguageModuleRequirement.new(tag, spec, tags[1])
else
_parse_string_spec(spec, tags)
def parse_symbol_spec(spec, tags)
case spec
when :clt
odeprecated "'depends_on :clt'"
when :tex
odeprecated "'depends_on :tex'"
TeXRequirement.new(tags)
when :autoconf, :automake, :bsdmake, :libtool
output_deprecation(spec)
autotools_dep(spec, tags)
when :cairo, :fontconfig, :freetype, :libpng, :pixman
output_deprecation(spec)
Dependency.new(spec.to_s, tags)
when :ant, :expat
output_deprecation(spec)
Dependency.new(spec.to_s, tags)
when :libltdl
tags << :run
output_deprecation("libtool")
Dependency.new("libtool", tags)
when :apr
output_deprecation(spec, "apr-util")
Dependency.new("apr-util", tags)
when :fortran
output_deprecation(spec, "gcc")
Dependency.new("gcc", tags)
when :gpg
output_deprecation(spec, "gnupg")
Dependency.new("gnupg", tags)
when :hg
output_deprecation(spec, "mercurial")
Dependency.new("mercurial", tags)
when :mpi
output_deprecation(spec, "open-mpi")
Dependency.new("open-mpi", tags)
when :python, :python2
output_deprecation(spec, "python")
Dependency.new("python", tags)
when :python3
output_deprecation(spec, "python3")
Dependency.new("python3", tags)
when :emacs, :mysql, :perl, :postgresql, :rbenv, :ruby
output_deprecation(spec)
Dependency.new(spec, tags)
else
super
end
end
end

alias _parse_symbol_spec parse_symbol_spec
private

def parse_symbol_spec(spec, tags)
case spec
when :clt
odeprecated "'depends_on :clt'"
when :tex
odeprecated "'depends_on :tex'"
TeXRequirement.new(tags)
when :autoconf, :automake, :bsdmake, :libtool
output_deprecation(spec)
autotools_dep(spec, tags)
when :cairo, :fontconfig, :freetype, :libpng, :pixman
output_deprecation(spec)
Dependency.new(spec.to_s, tags)
when :ant, :expat
output_deprecation(spec)
def autotools_dep(spec, tags)
tags << :build unless tags.include? :run
Dependency.new(spec.to_s, tags)
when :libltdl
tags << :run
output_deprecation("libtool")
Dependency.new("libtool", tags)
when :apr
output_deprecation(spec, "apr-util")
Dependency.new("apr-util", tags)
when :fortran
output_deprecation(spec, "gcc")
Dependency.new("gcc", tags)
when :gpg
output_deprecation(spec, "gnupg")
Dependency.new("gnupg", tags)
when :hg
output_deprecation(spec, "mercurial")
Dependency.new("mercurial", tags)
when :mpi
output_deprecation(spec, "open-mpi")
Dependency.new("open-mpi", tags)
when :python, :python2
output_deprecation(spec, "python")
Dependency.new("python", tags)
when :python3
output_deprecation(spec, "python3")
Dependency.new("python3", tags)
when :emacs, :mysql, :perl, :postgresql, :rbenv, :ruby
output_deprecation(spec)
Dependency.new(spec, tags)
else
_parse_symbol_spec(spec, tags)
end
end

def autotools_dep(spec, tags)
tags << :build unless tags.include? :run
Dependency.new(spec.to_s, tags)
def output_deprecation(dependency, new_dependency = dependency)
odeprecated "'depends_on :#{dependency}'",
"'depends_on \"#{new_dependency}\"'"
end
end

def output_deprecation(dependency, new_dependency = dependency)
odeprecated "'depends_on :#{dependency}'",
"'depends_on \"#{new_dependency}\"'"
end
prepend Compat
end
24 changes: 13 additions & 11 deletions Library/Homebrew/compat/formula_support.rb
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
require "formula_support"

class KegOnlyReason
alias _to_s to_s
module Compat
def to_s
case @reason
when :provided_by_osx
odeprecated "keg_only :provided_by_osx", "keg_only :provided_by_macos"
@reason = :provided_by_macos
when :shadowed_by_osx
odeprecated "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos"
@reason = :shadowed_by_macos
end

def to_s
case @reason
when :provided_by_osx
odeprecated "keg_only :provided_by_osx", "keg_only :provided_by_macos"
@reason = :provided_by_macos
when :shadowed_by_osx
odeprecated "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos"
@reason = :shadowed_by_macos
super
end

_to_s
end

prepend Compat
end
10 changes: 10 additions & 0 deletions Library/Homebrew/test/dependency_collector_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -128,5 +128,15 @@ def find_requirement(klass)
resource.download_strategy = Class.new
expect { subject.add(resource) }.to raise_error(TypeError)
end

it "is deprecated when called with a language module", :needs_compat do
expect(subject).to receive(:odeprecated)
subject.add("lpeg" => :lua)
end

it "is deprecated when called with deprecated requirements", :needs_compat do
expect(subject).to receive(:odeprecated)
subject.add(:python)
end
end
end
8 changes: 7 additions & 1 deletion Library/Homebrew/test/formula_support_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
describe KegOnlyReason do
describe "#to_s" do
it "returns the reason provided" do
r = KegOnlyReason.new :provided_by_osx, "test"
r = KegOnlyReason.new :provided_by_macos, "test"
expect(r.to_s).to eq("test")
end

it "returns a default message when no reason is provided" do
r = KegOnlyReason.new :provided_by_macos, ""
expect(r.to_s).to match(/^macOS already provides/)
end

it "is deprecated when reason mentions 'osx'", :needs_compat do
r = KegOnlyReason.new :provided_by_osx, "test"
expect(r).to receive(:odeprecated)
r.to_s
end
end
end

Expand Down

0 comments on commit 985202c

Please sign in to comment.