From 5e6c40e28f101c9970af6a3f891fd51323e33de7 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 18 Jun 2018 14:36:51 +0100 Subject: [PATCH] Make versioned formulae regex more consistent. Share the regex where possible and otherwise ensure they are identical. --- Library/Homebrew/dev-cmd/bottle.rb | 9 +++++++-- Library/Homebrew/extend/os/mac/formula_cellar_checks.rb | 2 +- Library/Homebrew/rubocops/lines_cop.rb | 2 +- Library/Homebrew/test/version_spec.rb | 6 ++++++ Library/Homebrew/version.rb | 4 ++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb index 0edede02ec..a521c53308 100644 --- a/Library/Homebrew/dev-cmd/bottle.rb +++ b/Library/Homebrew/dev-cmd/bottle.rb @@ -284,8 +284,13 @@ module Homebrew end ignores = [] - if f.deps.any? { |dep| dep.name =~ /^go(@[\d\.]+)?$/ } - ignores << %r{#{Regexp.escape(HOMEBREW_CELLAR)}/go(@[\d\.]+)?/[\d\.]+/libexec} + any_go_deps = f.deps.any? do |dep| + dep.name =~ Version.formula_optionally_versioned_regex(:go) + end + if any_go_deps + go_regex = + Version.formula_optionally_versioned_regex(:go, full: false) + ignores << %r{#{Regexp.escape(HOMEBREW_CELLAR)}/#{go_regex}/[\d\.]+/libexec} end relocatable = true diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb index f520748d6a..eb16b93d81 100644 --- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb @@ -7,7 +7,7 @@ module FormulaCellarChecks formula.name.start_with?(formula_name) end - return if formula.name =~ /^php(@?\d+\.?\d*?)?$/ + return if formula.name =~ Version.formula_optionally_versioned_regex(:php) return if MacOS.version < :mavericks && formula.name.start_with?("postgresql") return if MacOS.version < :yosemite && formula.name.start_with?("memcached") diff --git a/Library/Homebrew/rubocops/lines_cop.rb b/Library/Homebrew/rubocops/lines_cop.rb index 141ab6fdf3..d179815468 100644 --- a/Library/Homebrew/rubocops/lines_cop.rb +++ b/Library/Homebrew/rubocops/lines_cop.rb @@ -290,7 +290,7 @@ module RuboCop find_every_method_call_by_name(body_node, :system).each do |method_node| # Skip Kibana: npm cache edge (see formula for more details) - next if @formula_name =~ /^kibana(\@\d+(\.\d+)?)?$/i + next if @formula_name =~ /^kibana(@\d[\d.]*)?$/ first_param, second_param = parameters(method_node) next if !node_equals?(first_param, "npm") || !node_equals?(second_param, "install") diff --git a/Library/Homebrew/test/version_spec.rb b/Library/Homebrew/test/version_spec.rb index c80998e528..7c61ffdf20 100644 --- a/Library/Homebrew/test/version_spec.rb +++ b/Library/Homebrew/test/version_spec.rb @@ -1,5 +1,11 @@ require "version" +describe Version do + specify ".formula_optionally_versioned_regex" do + expect(described_class.formula_optionally_versioned_regex("foo")).to match("foo@1.2") + end +end + describe Version::Token do specify "#inspect" do expect(described_class.new("foo").inspect).to eq('#') diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index b6c0a79abc..44253b17a1 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -3,6 +3,10 @@ require "version/null" class Version include Comparable + def self.formula_optionally_versioned_regex(name, full: true) + /#{"^" if full}#{Regexp.escape(name)}(@\d[\d.]*)?#{"$" if full}/ + end + class Token include Comparable