Clean up code style and remove .rubocop_todo.yml
.
This commit is contained in:
parent
91ab116ace
commit
175ca909ee
@ -1,6 +1,5 @@
|
||||
inherit_from:
|
||||
- ../.rubocop.yml
|
||||
- .rubocop_todo.yml
|
||||
|
||||
AllCops:
|
||||
Include:
|
||||
@ -26,9 +25,26 @@ Lint/NestedMethodDefinition:
|
||||
Lint/ParenthesesAsGroupedExpression:
|
||||
Enabled: true
|
||||
|
||||
Metrics/BlockNesting:
|
||||
Max: 5
|
||||
|
||||
Metrics/ModuleLength:
|
||||
Max: 360
|
||||
|
||||
Metrics/ParameterLists:
|
||||
CountKeywordArgs: false
|
||||
|
||||
# we won't change backward compatible method names
|
||||
Naming/MethodName:
|
||||
Exclude:
|
||||
- 'compat/**/*'
|
||||
|
||||
# we won't change backward compatible predicate names
|
||||
Naming/PredicateName:
|
||||
Exclude:
|
||||
- 'compat/**/*'
|
||||
NameWhitelist: is_32_bit?, is_64_bit?
|
||||
|
||||
Style/BlockDelimiters:
|
||||
Exclude:
|
||||
- '**/*_spec.rb'
|
||||
@ -41,14 +57,3 @@ Style/GuardClause:
|
||||
# hash-rockets preferred for formulae, a: 1 preferred elsewhere
|
||||
Style/HashSyntax:
|
||||
EnforcedStyle: ruby19_no_mixed_keys
|
||||
|
||||
# we won't change backward compatible method names
|
||||
Naming/MethodName:
|
||||
Exclude:
|
||||
- 'compat/**/*'
|
||||
|
||||
# we won't change backward compatible predicate names
|
||||
Naming/PredicateName:
|
||||
Exclude:
|
||||
- 'compat/**/*'
|
||||
NameWhitelist: is_32_bit?, is_64_bit?
|
||||
|
@ -1,138 +0,0 @@
|
||||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config --exclude-limit 100`
|
||||
# on 2017-01-27 21:44:55 +0000 using RuboCop version 0.47.1.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the offenses are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
# versions of RuboCop, may require this file to be generated again.
|
||||
|
||||
# Offense count: 17
|
||||
Lint/HandleExceptions:
|
||||
Exclude:
|
||||
- 'cmd/install.rb'
|
||||
- 'cmd/reinstall.rb'
|
||||
- 'cmd/tap.rb'
|
||||
- 'cmd/update-report.rb'
|
||||
- 'cmd/upgrade.rb'
|
||||
- 'cmd/uses.rb'
|
||||
- 'descriptions.rb'
|
||||
- 'diagnostic.rb'
|
||||
- 'extend/ENV/super.rb'
|
||||
- 'extend/pathname.rb'
|
||||
- 'formula.rb'
|
||||
- 'formula_versions.rb'
|
||||
- 'test/ENV_test.rb'
|
||||
|
||||
# Offense count: 3
|
||||
Lint/IneffectiveAccessModifier:
|
||||
Exclude:
|
||||
- 'formula.rb'
|
||||
- 'version.rb'
|
||||
|
||||
# Offense count: 1
|
||||
Lint/Loop:
|
||||
Exclude:
|
||||
- 'patch.rb'
|
||||
|
||||
# Offense count: 28
|
||||
Lint/RescueException:
|
||||
Exclude:
|
||||
- 'brew.rb'
|
||||
- 'build.rb'
|
||||
- 'cmd/fetch.rb'
|
||||
- 'cmd/reinstall.rb'
|
||||
- 'cmd/update-report.rb'
|
||||
- 'debrew.rb'
|
||||
- 'dev-cmd/pull.rb'
|
||||
- 'dev-cmd/test.rb'
|
||||
- 'formula.rb'
|
||||
- 'formula_installer.rb'
|
||||
- 'migrator.rb'
|
||||
- 'postinstall.rb'
|
||||
- 'readall.rb'
|
||||
- 'test.rb'
|
||||
- 'test/ENV_test.rb'
|
||||
- 'utils/fork.rb'
|
||||
|
||||
# Offense count: 1
|
||||
Lint/ShadowedException:
|
||||
Exclude:
|
||||
- 'utils/fork.rb'
|
||||
|
||||
# Offense count: 13
|
||||
# Configuration parameters: CountBlocks.
|
||||
Metrics/BlockNesting:
|
||||
Max: 5
|
||||
|
||||
# Offense count: 19
|
||||
# Configuration parameters: CountComments.
|
||||
Metrics/ModuleLength:
|
||||
Max: 400
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: CountKeywordArgs.
|
||||
Metrics/ParameterLists:
|
||||
Max: 6
|
||||
|
||||
# Offense count: 2
|
||||
Security/MarshalLoad:
|
||||
Exclude:
|
||||
- 'dependency.rb'
|
||||
- 'utils/fork.rb'
|
||||
|
||||
# Offense count: 1
|
||||
Naming/AccessorMethodName:
|
||||
Exclude:
|
||||
- 'extend/ENV/super.rb'
|
||||
|
||||
# Offense count: 6
|
||||
Style/ClassVars:
|
||||
Exclude:
|
||||
- 'dev-cmd/audit.rb'
|
||||
- 'formula_installer.rb'
|
||||
- 'test/support/helper/fs_leak_logger.rb'
|
||||
|
||||
# Offense count: 13
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: compact, expanded
|
||||
Style/EmptyMethod:
|
||||
Exclude:
|
||||
- 'debrew/irb.rb'
|
||||
- 'download_strategy.rb'
|
||||
- 'extend/ENV/super.rb'
|
||||
- 'formula.rb'
|
||||
- 'patch.rb'
|
||||
|
||||
# Offense count: 13
|
||||
# Configuration parameters: AllowedVariables.
|
||||
Style/GlobalVars:
|
||||
Exclude:
|
||||
- 'diagnostic.rb'
|
||||
- 'utils.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: module_function, extend_self
|
||||
Style/ModuleFunction:
|
||||
Exclude:
|
||||
- 'os/mac/xcode.rb'
|
||||
|
||||
# Offense count: 8
|
||||
Style/MultilineBlockChain:
|
||||
Exclude:
|
||||
- 'cmd/search.rb'
|
||||
- 'dev-cmd/aspell-dictionaries.rb'
|
||||
- 'dev-cmd/audit.rb'
|
||||
- 'dev-cmd/man.rb'
|
||||
- 'diagnostic.rb'
|
||||
- 'test/patching_test.rb'
|
||||
|
||||
# Offense count: 4
|
||||
# Cop supports --auto-correct.
|
||||
Style/MutableConstant:
|
||||
Exclude:
|
||||
- 'dependency_collector.rb'
|
||||
- 'formulary.rb'
|
||||
- 'tab.rb'
|
||||
- 'tap.rb'
|
@ -146,7 +146,7 @@ rescue MethodDeprecatedError => e
|
||||
$stderr.puts " #{Formatter.url(e.issues_url)}"
|
||||
end
|
||||
exit 1
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe e
|
||||
if internal_cmd && defined?(OS::ISSUES_URL) &&
|
||||
!ENV["HOMEBREW_NO_AUTO_UPDATE"]
|
||||
|
@ -190,7 +190,7 @@ begin
|
||||
options = Options.create(ARGV.flags_only)
|
||||
build = Build.new(formula, options)
|
||||
build.install
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
Marshal.dump(e, error_pipe)
|
||||
error_pipe.close
|
||||
exit! 1
|
||||
|
@ -49,8 +49,10 @@ module Homebrew
|
||||
if fetch_bottle?(f)
|
||||
begin
|
||||
fetch_formula(f.bottle)
|
||||
rescue Exception => e
|
||||
raise if ARGV.homebrew_developer? || e.is_a?(Interrupt)
|
||||
rescue Interrupt
|
||||
raise
|
||||
rescue => e
|
||||
raise if ARGV.homebrew_developer?
|
||||
fetched_bottle = false
|
||||
onoe e.message
|
||||
opoo "Bottle fetch failed: fetching the source."
|
||||
|
@ -339,6 +339,7 @@ module Homebrew
|
||||
rescue FormulaInstallationAlreadyAttemptedError
|
||||
# We already attempted to install f as part of the dependency tree of
|
||||
# another formula. In that case, don't generate an error, just move on.
|
||||
return
|
||||
rescue CannotInstallFormulaError => e
|
||||
ofail e.message
|
||||
end
|
||||
|
@ -47,8 +47,8 @@ module Homebrew
|
||||
fi.install
|
||||
fi.finish
|
||||
rescue FormulaInstallationAlreadyAttemptedError
|
||||
# next
|
||||
rescue Exception
|
||||
return
|
||||
rescue Exception # rubocop:disable Lint/RescueException
|
||||
ignore_interrupts { restore_backup(keg, keg_was_linked) }
|
||||
raise
|
||||
else
|
||||
|
@ -117,6 +117,7 @@ module Homebrew
|
||||
|
||||
case output_type
|
||||
when :print
|
||||
args << "--debug" if ARGV.debug?
|
||||
args << "--display-cop-names" if ARGV.include? "--display-cop-names"
|
||||
args << "--format" << "simple" if files
|
||||
system(cache_env, "rubocop", "_#{HOMEBREW_RUBOCOP_VERSION}_", *args)
|
||||
|
@ -54,8 +54,7 @@ module Homebrew
|
||||
quiet: ARGV.quieter?
|
||||
rescue TapRemoteMismatchError => e
|
||||
odie e
|
||||
rescue TapAlreadyTappedError, TapAlreadyUnshallowError
|
||||
# Do nothing.
|
||||
rescue TapAlreadyTappedError, TapAlreadyUnshallowError # rubocop:disable Lint/HandleExceptions
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -372,7 +372,7 @@ class Reporter
|
||||
new_version = formula.pkg_version
|
||||
old_version = FormulaVersions.new(formula).formula_at_revision(@initial_revision, &:pkg_version)
|
||||
next if new_version == old_version
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "#{e.message}\n#{e.backtrace.join "\n"}" if ARGV.homebrew_developer?
|
||||
end
|
||||
@report[:M] << tap.formula_file_to_name(src)
|
||||
@ -460,7 +460,7 @@ class Reporter
|
||||
unless Formulary.factory(new_full_name).keg_only?
|
||||
system HOMEBREW_BREW_FILE, "link", new_full_name, "--overwrite"
|
||||
end
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "#{e.message}\n#{e.backtrace.join "\n"}" if ARGV.homebrew_developer?
|
||||
end
|
||||
next
|
||||
@ -521,7 +521,7 @@ class Reporter
|
||||
|
||||
begin
|
||||
f = Formulary.factory(new_full_name)
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "#{e.message}\n#{e.backtrace.join "\n"}" if ARGV.homebrew_developer?
|
||||
next
|
||||
end
|
||||
|
@ -150,6 +150,7 @@ module Homebrew
|
||||
rescue FormulaInstallationAlreadyAttemptedError
|
||||
# We already attempted to upgrade f as part of the dependency tree of
|
||||
# another formula. In that case, don't generate an error, just move on.
|
||||
return
|
||||
rescue CannotInstallFormulaError => e
|
||||
ofail e
|
||||
rescue BuildError => e
|
||||
|
@ -74,12 +74,13 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
dep_formulae = deps.map do |dep|
|
||||
dep_formulae = deps.flat_map do |dep|
|
||||
begin
|
||||
dep.to_formula
|
||||
rescue
|
||||
[]
|
||||
end
|
||||
end.compact
|
||||
end
|
||||
|
||||
reqs_by_formula = ([f] + dep_formulae).flat_map do |formula|
|
||||
formula.requirements.map { |req| [formula, req] }
|
||||
@ -118,6 +119,7 @@ module Homebrew
|
||||
rescue FormulaUnavailableError
|
||||
# Silently ignore this case as we don't care about things used in
|
||||
# taps that aren't currently tapped.
|
||||
next
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -9,7 +9,7 @@ module Debrew
|
||||
module Raise
|
||||
def raise(*)
|
||||
super
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
e.extend(Ignorable)
|
||||
super(e) unless Debrew.debug(e) == :ignore
|
||||
end
|
||||
@ -92,7 +92,7 @@ module Debrew
|
||||
yield
|
||||
rescue SystemExit
|
||||
original_raise
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
debug(e)
|
||||
ensure
|
||||
@active = false
|
||||
@ -119,7 +119,7 @@ module Debrew
|
||||
if e.is_a?(Ignorable)
|
||||
menu.choice(:irb) do
|
||||
puts "When you exit this IRB session, execution will continue."
|
||||
set_trace_func proc { |event, _, _, id, binding, klass|
|
||||
set_trace_func proc { |event, _, _, id, binding, klass| # rubocop:disable Metrics/ParameterLists
|
||||
if klass == Raise && id == :raise && event == "return"
|
||||
set_trace_func(nil)
|
||||
synchronize { IRB.start_within(binding) }
|
||||
|
@ -4,8 +4,7 @@ module IRB
|
||||
@setup_done = false
|
||||
|
||||
extend Module.new {
|
||||
def parse_opts
|
||||
end
|
||||
def parse_opts; end
|
||||
|
||||
def start_within(binding)
|
||||
unless @setup_done
|
||||
|
@ -64,7 +64,7 @@ class Dependency
|
||||
end
|
||||
|
||||
def self._load(marshaled)
|
||||
new(*Marshal.load(marshaled))
|
||||
new(*Marshal.load(marshaled)) # rubocop:disable Security/MarshalLoad
|
||||
end
|
||||
|
||||
class << self
|
||||
|
@ -4,6 +4,7 @@ require "ld64_dependency"
|
||||
require "requirement"
|
||||
require "requirements"
|
||||
require "set"
|
||||
require "extend/cachable"
|
||||
|
||||
## A dependency is a formula that another formula needs to install.
|
||||
## A requirement is something other than a formula that another formula
|
||||
@ -16,17 +17,13 @@ require "set"
|
||||
# This class is used by `depends_on` in the formula DSL to turn dependency
|
||||
# specifications into the proper kinds of dependencies and requirements.
|
||||
class DependencyCollector
|
||||
extend Cachable
|
||||
|
||||
# Define the languages that we can handle as external dependencies.
|
||||
LANGUAGE_MODULES = Set[
|
||||
:lua, :lua51, :perl, :python, :python3, :ruby
|
||||
].freeze
|
||||
|
||||
CACHE = {}
|
||||
|
||||
def self.clear_cache
|
||||
CACHE.clear
|
||||
end
|
||||
|
||||
attr_reader :deps, :requirements
|
||||
|
||||
def initialize
|
||||
@ -45,7 +42,7 @@ class DependencyCollector
|
||||
end
|
||||
|
||||
def fetch(spec)
|
||||
CACHE.fetch(cache_key(spec)) { |key| CACHE[key] = build(spec) }
|
||||
self.class.cache.fetch(cache_key(spec)) { |key| self.class.cache[key] = build(spec) }
|
||||
end
|
||||
|
||||
def cache_key(spec)
|
||||
|
@ -78,10 +78,10 @@ class Descriptions
|
||||
|
||||
formula_names.each do |name|
|
||||
begin
|
||||
desc = Formulary.factory(name).desc
|
||||
@cache[name] = Formulary.factory(name).desc
|
||||
rescue FormulaUnavailableError, *FormulaVersions::IGNORED_EXCEPTIONS
|
||||
@cache.delete(name)
|
||||
end
|
||||
@cache[name] = desc
|
||||
end
|
||||
save_cache if options[:save]
|
||||
end
|
||||
|
@ -27,13 +27,12 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
languages.inject([]) do |resources, (lang, path)|
|
||||
languages.each do |lang, path|
|
||||
r = Resource.new(lang)
|
||||
r.owner = Formulary.factory("aspell")
|
||||
r.url "#{dict_url}/#{path}"
|
||||
r.mirror "#{dict_mirror}/#{path}"
|
||||
resources << r
|
||||
end.each(&:fetch).each do |r|
|
||||
r.fetch
|
||||
puts <<-EOS
|
||||
option "with-lang-#{r.name}", "Install #{r.name} dictionary"
|
||||
resource "#{r.name}" do
|
||||
|
@ -53,7 +53,7 @@ module Homebrew
|
||||
module_function
|
||||
|
||||
def audit
|
||||
Homebrew.inject_dump_stats!(FormulaAuditor, /^audit_/) if ARGV.switch? "D"
|
||||
inject_dump_stats!(FormulaAuditor, /^audit_/) if ARGV.switch? "D"
|
||||
Homebrew.auditing = true
|
||||
|
||||
formula_count = 0
|
||||
@ -387,8 +387,10 @@ class FormulaAuditor
|
||||
end
|
||||
end
|
||||
|
||||
# core aliases + tap alias names + tap alias full name
|
||||
@@aliases ||= Formula.aliases + Formula.tap_aliases
|
||||
def self.aliases
|
||||
# core aliases + tap alias names + tap alias full name
|
||||
@aliases ||= Formula.aliases + Formula.tap_aliases
|
||||
end
|
||||
|
||||
def audit_formula_name
|
||||
return unless @strict
|
||||
@ -442,7 +444,7 @@ class FormulaAuditor
|
||||
problem "Dependency '#{dep.name}' was renamed; use new name '#{dep_f.name}'."
|
||||
end
|
||||
|
||||
if @@aliases.include?(dep.name) &&
|
||||
if self.class.aliases.include?(dep.name) &&
|
||||
(dep_f.core_formula? || !dep_f.versioned_formula?)
|
||||
problem "Dependency '#{dep.name}' is an alias; use the canonical name '#{dep.to_formula.full_name}'."
|
||||
end
|
||||
@ -453,16 +455,16 @@ class FormulaAuditor
|
||||
problem "Dependency '#{dep.name}' may be unnecessary as it is provided by macOS; try to build this formula without it."
|
||||
end
|
||||
|
||||
dep.options.reject do |opt|
|
||||
next true if dep_f.option_defined?(opt)
|
||||
dep_f.requirements.detect do |r|
|
||||
dep.options.each do |opt|
|
||||
next if dep_f.option_defined?(opt)
|
||||
next if dep_f.requirements.detect do |r|
|
||||
if r.recommended?
|
||||
opt.name == "with-#{r.name}"
|
||||
elsif r.optional?
|
||||
opt.name == "without-#{r.name}"
|
||||
end
|
||||
end
|
||||
end.each do |opt|
|
||||
|
||||
problem "Dependency #{dep} does not define option #{opt.name.inspect}"
|
||||
end
|
||||
|
||||
|
@ -75,7 +75,7 @@ module Homebrew
|
||||
|
||||
@put_filenames ||= []
|
||||
|
||||
return if @put_filenames.include? filename
|
||||
return if @put_filenames.include?(filename)
|
||||
|
||||
puts Formatter.error(filename.to_s)
|
||||
@put_filenames << filename
|
||||
@ -84,8 +84,7 @@ module Homebrew
|
||||
result = false
|
||||
|
||||
keg.each_unique_file_matching(string) do |file|
|
||||
# skip document file.
|
||||
next if Metafiles::EXTENSIONS.include? file.extname
|
||||
next if Metafiles::EXTENSIONS.include?(file.extname) # Skip document files.
|
||||
|
||||
linked_libraries = Keg.file_linked_libraries(file, string)
|
||||
result ||= !linked_libraries.empty?
|
||||
@ -156,9 +155,7 @@ module Homebrew
|
||||
return ofail "Formula not installed or up-to-date: #{f.full_name}"
|
||||
end
|
||||
|
||||
tap = f.tap
|
||||
|
||||
unless tap
|
||||
unless tap = f.tap
|
||||
unless ARGV.include?("--force-core-tap")
|
||||
return ofail "Formula not from core or any taps: #{f.full_name}"
|
||||
end
|
||||
|
@ -48,12 +48,9 @@ module Homebrew
|
||||
def path_glob_commands(glob)
|
||||
Pathname.glob(glob)
|
||||
.sort_by { |source_file| sort_key_for_path(source_file) }
|
||||
.map do |source_file|
|
||||
source_file.read.lines
|
||||
.grep(/^#:/)
|
||||
.map { |line| line.slice(2..-1) }
|
||||
.join
|
||||
end.reject { |s| s.strip.empty? || s.include?("@hide_from_man_page") }
|
||||
.map(&:read).map(&:lines)
|
||||
.map { |lines| lines.grep(/^#:/).map { |line| line.slice(2..-1) }.join }
|
||||
.reject { |s| s.strip.empty? || s.include?("@hide_from_man_page") }
|
||||
end
|
||||
|
||||
def build_man_page
|
||||
|
@ -154,8 +154,8 @@ module Homebrew
|
||||
|
||||
begin
|
||||
f = Formula[name]
|
||||
# Make sure we catch syntax errors.
|
||||
rescue Exception
|
||||
rescue Exception # rubocop:disable Lint/RescueException
|
||||
# Make sure we catch syntax errors.
|
||||
next
|
||||
end
|
||||
|
||||
|
@ -84,7 +84,7 @@ module Homebrew
|
||||
rescue ::Test::Unit::AssertionFailedError => e
|
||||
ofail "#{f.full_name}: failed"
|
||||
puts e.message
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
ofail "#{f.full_name}: failed"
|
||||
puts e, e.backtrace
|
||||
ensure
|
||||
|
@ -151,8 +151,10 @@ module Homebrew
|
||||
return unless File.directory?(dir)
|
||||
|
||||
files = Dir.chdir(dir) do
|
||||
Dir[pattern].select { |f| File.file?(f) && !File.symlink?(f) } - Dir.glob(white_list)
|
||||
end.map { |file| File.join(dir, file) }
|
||||
(Dir.glob(pattern) - Dir.glob(white_list))
|
||||
.select { |f| File.file?(f) && !File.symlink?(f) }
|
||||
.map { |f| File.join(dir, f) }
|
||||
end
|
||||
return if files.empty?
|
||||
|
||||
inject_file_list(files, message)
|
||||
@ -427,15 +429,15 @@ module Homebrew
|
||||
end
|
||||
|
||||
def check_user_path_1
|
||||
$seen_prefix_bin = false
|
||||
$seen_prefix_sbin = false
|
||||
@seen_prefix_bin = false
|
||||
@seen_prefix_sbin = false
|
||||
|
||||
message = ""
|
||||
|
||||
paths(ENV["HOMEBREW_PATH"]).each do |p|
|
||||
case p
|
||||
when "/usr/bin"
|
||||
unless $seen_prefix_bin
|
||||
unless @seen_prefix_bin
|
||||
# only show the doctor message if there are any conflicts
|
||||
# rationale: a default install should not trigger any brew doctor messages
|
||||
conflicts = Dir["#{HOMEBREW_PREFIX}/bin/*"]
|
||||
@ -458,9 +460,9 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
when "#{HOMEBREW_PREFIX}/bin"
|
||||
$seen_prefix_bin = true
|
||||
@seen_prefix_bin = true
|
||||
when "#{HOMEBREW_PREFIX}/sbin"
|
||||
$seen_prefix_sbin = true
|
||||
@seen_prefix_sbin = true
|
||||
end
|
||||
end
|
||||
|
||||
@ -468,7 +470,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def check_user_path_2
|
||||
return if $seen_prefix_bin
|
||||
return if @seen_prefix_bin
|
||||
|
||||
<<-EOS.undent
|
||||
Homebrew's bin was not found in your PATH.
|
||||
@ -478,7 +480,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def check_user_path_3
|
||||
return if $seen_prefix_sbin
|
||||
return if @seen_prefix_sbin
|
||||
|
||||
# Don't complain about sbin not being in the path if it doesn't exist
|
||||
sbin = HOMEBREW_PREFIX/"sbin"
|
||||
@ -952,6 +954,7 @@ module Homebrew
|
||||
Putting non-prefixed coreutils in your path can cause gmp builds to fail.
|
||||
EOS
|
||||
rescue FormulaUnavailableError
|
||||
return
|
||||
end
|
||||
|
||||
def check_for_non_prefixed_findutils
|
||||
@ -966,6 +969,7 @@ module Homebrew
|
||||
Putting non-prefixed findutils in your path can cause python builds to fail.
|
||||
EOS
|
||||
rescue FormulaUnavailableError
|
||||
return
|
||||
end
|
||||
|
||||
def check_for_pydistutils_cfg_in_home
|
||||
|
@ -18,8 +18,7 @@ class AbstractDownloadStrategy
|
||||
end
|
||||
|
||||
# Download and cache the resource as {#cached_location}.
|
||||
def fetch
|
||||
end
|
||||
def fetch; end
|
||||
|
||||
# Suppress output
|
||||
def shutup!
|
||||
@ -37,13 +36,11 @@ class AbstractDownloadStrategy
|
||||
# Unpack {#cached_location} into the current working directory, and possibly
|
||||
# chdir into the newly-unpacked directory.
|
||||
# Unlike {Resource#stage}, this does not take a block.
|
||||
def stage
|
||||
end
|
||||
def stage; end
|
||||
|
||||
# @!attribute [r] cached_location
|
||||
# The path to the cached file or directory associated with the resource.
|
||||
def cached_location
|
||||
end
|
||||
def cached_location; end
|
||||
|
||||
# @!attribute [r]
|
||||
# return most recent modified time for all files in the current working directory after stage.
|
||||
@ -204,14 +201,11 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
|
||||
true
|
||||
end
|
||||
|
||||
def clone_repo
|
||||
end
|
||||
def clone_repo; end
|
||||
|
||||
def update
|
||||
end
|
||||
def update; end
|
||||
|
||||
def current_revision
|
||||
end
|
||||
def current_revision; end
|
||||
|
||||
def extract_ref(specs)
|
||||
key = REF_TYPES.find { |type| specs.key?(type) }
|
||||
|
@ -24,8 +24,7 @@ module Superenv
|
||||
end
|
||||
|
||||
# @private
|
||||
def self.bin
|
||||
end
|
||||
def self.bin; end
|
||||
|
||||
def reset
|
||||
super
|
||||
@ -324,11 +323,9 @@ module Superenv
|
||||
end
|
||||
end
|
||||
|
||||
def set_x11_env_if_installed
|
||||
end
|
||||
def set_x11_env_if_installed; end
|
||||
|
||||
def set_cpu_flags(*)
|
||||
end
|
||||
def set_cpu_flags(_, _ = "", _ = {}); end
|
||||
end
|
||||
|
||||
require "extend/os/extend/ENV/super"
|
||||
|
9
Library/Homebrew/extend/cachable.rb
Normal file
9
Library/Homebrew/extend/cachable.rb
Normal file
@ -0,0 +1,9 @@
|
||||
module Cachable
|
||||
def cache
|
||||
@cache ||= {}
|
||||
end
|
||||
|
||||
def clear_cache
|
||||
cache.clear
|
||||
end
|
||||
end
|
@ -186,7 +186,7 @@ class Pathname
|
||||
begin
|
||||
tf.chown(uid, gid)
|
||||
tf.chmod(old_stat.mode)
|
||||
rescue Errno::EPERM
|
||||
rescue Errno::EPERM # rubocop:disable Lint/HandleExceptions
|
||||
end
|
||||
|
||||
File.rename(tf.path, self)
|
||||
|
@ -1041,14 +1041,14 @@ class Formula
|
||||
# keg's formula is deleted.
|
||||
begin
|
||||
keg = Keg.for(path)
|
||||
rescue NotAKegError, Errno::ENOENT
|
||||
rescue NotAKegError, Errno::ENOENT # rubocop:disable Lint/HandleExceptions
|
||||
# file doesn't belong to any keg.
|
||||
else
|
||||
tab_tap = Tab.for_keg(keg).tap
|
||||
return false if tab_tap.nil? # this keg doesn't below to any core/tap formula, most likely coming from a DIY install.
|
||||
begin
|
||||
Formulary.factory(keg.name)
|
||||
rescue FormulaUnavailableError
|
||||
rescue FormulaUnavailableError # rubocop:disable Lint/HandleExceptions
|
||||
# formula for this keg is deleted, so defer to whitelist
|
||||
rescue TapFormulaAmbiguityError, TapFormulaWithOldnameAmbiguityError
|
||||
return false # this keg belongs to another formula
|
||||
@ -1379,12 +1379,13 @@ class Formula
|
||||
# An array of all installed {Formula}
|
||||
# @private
|
||||
def self.installed
|
||||
@installed ||= racks.map do |rack|
|
||||
@installed ||= racks.flat_map do |rack|
|
||||
begin
|
||||
Formulary.from_rack(rack)
|
||||
rescue FormulaUnavailableError, TapFormulaAmbiguityError, TapFormulaWithOldnameAmbiguityError
|
||||
[]
|
||||
end
|
||||
end.compact.uniq(&:name)
|
||||
end.uniq(&:name)
|
||||
end
|
||||
|
||||
def self.installed_with_alias_path(alias_path)
|
||||
@ -1642,7 +1643,7 @@ class Formula
|
||||
with_logging("test") do
|
||||
test
|
||||
end
|
||||
rescue Exception
|
||||
rescue Exception # rubocop:disable Lint/RescueException
|
||||
staging.retain! if ARGV.debug?
|
||||
raise
|
||||
end
|
||||
@ -1667,8 +1668,7 @@ class Formula
|
||||
end
|
||||
|
||||
# @private
|
||||
def test
|
||||
end
|
||||
def test; end
|
||||
|
||||
# @private
|
||||
def test_fixtures(file)
|
||||
@ -1683,8 +1683,7 @@ class Formula
|
||||
# system "./configure", "--prefix=#{prefix}"
|
||||
# system "make", "install"
|
||||
# end</pre>
|
||||
def install
|
||||
end
|
||||
def install; end
|
||||
|
||||
protected
|
||||
|
||||
@ -1932,29 +1931,29 @@ class Formula
|
||||
end
|
||||
end
|
||||
|
||||
def self.method_added(method)
|
||||
case method
|
||||
when :brew
|
||||
raise "You cannot override Formula#brew in class #{name}"
|
||||
when :test
|
||||
define_method(:test_defined?) { true }
|
||||
when :options
|
||||
instance = allocate
|
||||
|
||||
specs.each do |spec|
|
||||
instance.options.each do |opt, desc|
|
||||
spec.option(opt[/^--(.+)$/, 1], desc)
|
||||
end
|
||||
end
|
||||
|
||||
remove_method(:options)
|
||||
end
|
||||
end
|
||||
|
||||
# The methods below define the formula DSL.
|
||||
class << self
|
||||
include BuildEnvironment::DSL
|
||||
|
||||
def method_added(method)
|
||||
case method
|
||||
when :brew
|
||||
raise "You cannot override Formula#brew in class #{name}"
|
||||
when :test
|
||||
define_method(:test_defined?) { true }
|
||||
when :options
|
||||
instance = allocate
|
||||
|
||||
specs.each do |spec|
|
||||
instance.options.each do |opt, desc|
|
||||
spec.option(opt[/^--(.+)$/, 1], desc)
|
||||
end
|
||||
end
|
||||
|
||||
remove_method(:options)
|
||||
end
|
||||
end
|
||||
|
||||
# The reason for why this software is not linked (by default) to
|
||||
# {::HOMEBREW_PREFIX}.
|
||||
# @private
|
||||
|
@ -58,13 +58,14 @@ class FormulaInstaller
|
||||
@options = Options.new
|
||||
@invalid_option_names = []
|
||||
@requirement_messages = []
|
||||
|
||||
@@attempted ||= Set.new
|
||||
|
||||
@poured_bottle = false
|
||||
@pour_failed = false
|
||||
end
|
||||
|
||||
def self.attempted
|
||||
@attempted ||= Set.new
|
||||
end
|
||||
|
||||
# When no build tools are available and build flags are passed through ARGV,
|
||||
# it's necessary to interrupt the user before any sort of installation
|
||||
# can proceed. Only invoked when the user has no developer tools.
|
||||
@ -145,7 +146,7 @@ class FormulaInstaller
|
||||
end
|
||||
|
||||
def check_install_sanity
|
||||
raise FormulaInstallationAlreadyAttemptedError, formula if @@attempted.include?(formula)
|
||||
raise FormulaInstallationAlreadyAttemptedError, formula if self.class.attempted.include?(formula)
|
||||
|
||||
return if ignore_deps?
|
||||
|
||||
@ -287,12 +288,12 @@ class FormulaInstaller
|
||||
end
|
||||
end
|
||||
|
||||
@@attempted << formula
|
||||
self.class.attempted << formula
|
||||
|
||||
if pour_bottle?(warn: true)
|
||||
begin
|
||||
pour
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
# any exceptions must leave us with nothing installed
|
||||
ignore_interrupts do
|
||||
formula.prefix.rmtree if formula.prefix.directory?
|
||||
@ -567,7 +568,7 @@ class FormulaInstaller
|
||||
oh1 "Installing #{formula.full_name} dependency: #{Formatter.identifier(dep.name)}"
|
||||
fi.install
|
||||
fi.finish
|
||||
rescue Exception
|
||||
rescue Exception # rubocop:disable Lint/RescueException
|
||||
ignore_interrupts do
|
||||
tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory?
|
||||
linked_keg.link if keg_was_linked
|
||||
@ -723,7 +724,7 @@ class FormulaInstaller
|
||||
if !formula.prefix.directory? || Keg.new(formula.prefix).empty_installation?
|
||||
raise "Empty installation"
|
||||
end
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
e.options = display_options(formula) if e.is_a?(BuildError)
|
||||
ignore_interrupts do
|
||||
# any exceptions must leave us with nothing installed
|
||||
@ -784,7 +785,7 @@ class FormulaInstaller
|
||||
puts " brew link #{formula.name}"
|
||||
@show_summary_heading = true
|
||||
Homebrew.failed = true
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "An unexpected error occurred during the `brew link` step"
|
||||
puts "The formula built, but is not symlinked into #{HOMEBREW_PREFIX}"
|
||||
puts e
|
||||
@ -815,7 +816,7 @@ class FormulaInstaller
|
||||
formula.plist_path.chmod 0644
|
||||
log = formula.var/"log"
|
||||
log.mkpath if formula.plist.include? log.to_s
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "Failed to install plist file"
|
||||
ohai e, e.backtrace if debug?
|
||||
Homebrew.failed = true
|
||||
@ -823,7 +824,7 @@ class FormulaInstaller
|
||||
|
||||
def fix_dynamic_linkage(keg)
|
||||
keg.fix_dynamic_linkage
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "Failed to fix install linkage"
|
||||
puts "The formula built, but you may encounter issues using it or linking other"
|
||||
puts "formula against it."
|
||||
@ -835,7 +836,7 @@ class FormulaInstaller
|
||||
def clean
|
||||
ohai "Cleaning" if verbose?
|
||||
Cleaner.new(formula).clean
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
opoo "The cleaning step did not complete successfully"
|
||||
puts "Still, the installation was successful, so we will link it into your prefix"
|
||||
ohai e, e.backtrace if debug?
|
||||
@ -845,7 +846,7 @@ class FormulaInstaller
|
||||
|
||||
def post_install
|
||||
Homebrew.run_post_install(formula)
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
opoo "The post-install step did not complete successfully"
|
||||
puts "You can try again using `brew postinstall #{formula.full_name}`"
|
||||
ohai e, e.backtrace if debug?
|
||||
@ -905,27 +906,31 @@ class FormulaInstaller
|
||||
super
|
||||
end
|
||||
|
||||
def self.locked
|
||||
@locked ||= []
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_predicate :hold_locks?
|
||||
|
||||
def lock
|
||||
return unless (@@locked ||= []).empty?
|
||||
return unless self.class.locked.empty?
|
||||
unless ignore_deps?
|
||||
formula.recursive_dependencies.each do |dep|
|
||||
@@locked << dep.to_formula
|
||||
self.class.locked << dep.to_formula
|
||||
end
|
||||
end
|
||||
@@locked.unshift(formula)
|
||||
@@locked.uniq!
|
||||
@@locked.each(&:lock)
|
||||
self.class.locked.unshift(formula)
|
||||
self.class.locked.uniq!
|
||||
self.class.locked.each(&:lock)
|
||||
@hold_locks = true
|
||||
end
|
||||
|
||||
def unlock
|
||||
return unless hold_locks?
|
||||
@@locked.each(&:unlock)
|
||||
@@locked.clear
|
||||
self.class.locked.each(&:unlock)
|
||||
self.class.locked.clear
|
||||
@hold_locks = false
|
||||
end
|
||||
|
||||
|
@ -44,7 +44,7 @@ class FormulaVersions
|
||||
# continue walking the history
|
||||
ohai "#{e} in #{name} at revision #{rev}", e.backtrace if ARGV.debug?
|
||||
rescue FormulaUnavailableError
|
||||
# Suppress this error
|
||||
return
|
||||
ensure
|
||||
Homebrew.raise_deprecation_exceptions = false
|
||||
end
|
||||
|
@ -1,18 +1,19 @@
|
||||
require "digest/md5"
|
||||
require "tap"
|
||||
require "extend/cachable"
|
||||
|
||||
# The Formulary is responsible for creating instances of Formula.
|
||||
# It is not meant to be used directly from formulae.
|
||||
|
||||
module Formulary
|
||||
FORMULAE = {}
|
||||
extend Cachable
|
||||
|
||||
def self.formula_class_defined?(path)
|
||||
FORMULAE.key?(path)
|
||||
cache.key?(path)
|
||||
end
|
||||
|
||||
def self.formula_class_get(path)
|
||||
FORMULAE.fetch(path)
|
||||
cache.fetch(path)
|
||||
end
|
||||
|
||||
def self.load_formula(name, path, contents, namespace)
|
||||
@ -44,7 +45,7 @@ module Formulary
|
||||
contents = path.open("r") { |f| ensure_utf8_encoding(f).read }
|
||||
namespace = "FormulaNamespace#{Digest::MD5.hexdigest(path.to_s)}"
|
||||
klass = load_formula(name, path, contents, namespace)
|
||||
FORMULAE[path] = klass
|
||||
cache[path] = klass
|
||||
end
|
||||
|
||||
if IO.method_defined?(:set_encoding)
|
||||
|
@ -100,7 +100,7 @@ class Migrator
|
||||
begin
|
||||
migrator = Migrator.new(formula)
|
||||
migrator.migrate
|
||||
rescue Exception => e
|
||||
rescue => e
|
||||
onoe e
|
||||
end
|
||||
end
|
||||
@ -196,7 +196,7 @@ class Migrator
|
||||
update_tabs
|
||||
rescue Interrupt
|
||||
ignore_interrupts { backup_oldname }
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "Error occurred while migrating."
|
||||
puts e
|
||||
puts e.backtrace if ARGV.debug?
|
||||
@ -304,7 +304,7 @@ class Migrator
|
||||
puts
|
||||
puts "You can try again using:"
|
||||
puts " brew link #{formula.name}"
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "An unexpected error occurred during linking"
|
||||
puts e
|
||||
puts e.backtrace if ARGV.debug?
|
||||
|
@ -183,7 +183,7 @@ module OS
|
||||
end
|
||||
|
||||
module CLT
|
||||
extend self
|
||||
module_function
|
||||
|
||||
STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo".freeze
|
||||
FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI".freeze
|
||||
|
@ -60,8 +60,7 @@ class EmbeddedPatch
|
||||
false
|
||||
end
|
||||
|
||||
def contents
|
||||
end
|
||||
def contents; end
|
||||
|
||||
def apply
|
||||
data = contents.gsub("HOMEBREW_PREFIX", HOMEBREW_PREFIX)
|
||||
@ -87,10 +86,13 @@ class DATAPatch < EmbeddedPatch
|
||||
def contents
|
||||
data = ""
|
||||
path.open("rb") do |f|
|
||||
begin
|
||||
loop do
|
||||
line = f.gets
|
||||
end until line.nil? || line =~ /^__END__$/
|
||||
data << line while line = f.gets
|
||||
break if line.nil? || line =~ /^__END__$/
|
||||
end
|
||||
while line = f.gets
|
||||
data << line
|
||||
end
|
||||
end
|
||||
data
|
||||
end
|
||||
|
@ -14,7 +14,7 @@ begin
|
||||
formula = ARGV.resolved_formulae.first
|
||||
formula.extend(Debrew::Formula) if ARGV.debug?
|
||||
formula.run_post_install
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
Marshal.dump(e, error_pipe)
|
||||
error_pipe.close
|
||||
exit! 1
|
||||
|
@ -52,7 +52,7 @@ module Readall
|
||||
Formulary.factory(file)
|
||||
rescue Interrupt
|
||||
raise
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "Invalid formula: #{file}"
|
||||
puts e
|
||||
failed = true
|
||||
|
@ -3,18 +3,16 @@ require "ostruct"
|
||||
require "options"
|
||||
require "json"
|
||||
require "development_tools"
|
||||
require "extend/cachable"
|
||||
|
||||
# Inherit from OpenStruct to gain a generic initialization method that takes a
|
||||
# hash and creates an attribute for each key and value. `Tab.new` probably
|
||||
# should not be called directly, instead use one of the class methods like
|
||||
# `Tab.create`.
|
||||
class Tab < OpenStruct
|
||||
FILENAME = "INSTALL_RECEIPT.json".freeze
|
||||
CACHE = {}
|
||||
extend Cachable
|
||||
|
||||
def self.clear_cache
|
||||
CACHE.clear
|
||||
end
|
||||
FILENAME = "INSTALL_RECEIPT.json".freeze
|
||||
|
||||
# Instantiates a Tab for a new installation of a formula.
|
||||
def self.create(formula, compiler, stdlib)
|
||||
@ -57,7 +55,7 @@ class Tab < OpenStruct
|
||||
# Returns the Tab for an install receipt at `path`.
|
||||
# Results are cached.
|
||||
def self.from_file(path)
|
||||
CACHE.fetch(path) { |p| CACHE[p] = from_file_content(File.read(p), p) }
|
||||
cache.fetch(path) { |p| cache[p] = from_file_content(File.read(p), p) }
|
||||
end
|
||||
|
||||
# Like Tab.from_file, but bypass the cache.
|
||||
@ -343,7 +341,7 @@ class Tab < OpenStruct
|
||||
# will no longer be valid.
|
||||
Formula.clear_installed_formulae_cache unless tabfile.exist?
|
||||
|
||||
CACHE[tabfile] = self
|
||||
self.class.cache[tabfile] = self
|
||||
tabfile.atomic_write(to_json)
|
||||
end
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
require "extend/string"
|
||||
require "extend/cachable"
|
||||
require "readall"
|
||||
|
||||
# a {Tap} is used to extend the formulae provided by Homebrew core.
|
||||
@ -8,14 +9,10 @@ require "readall"
|
||||
# {#user} represents Github username and {#repo} represents repository
|
||||
# name without leading `homebrew-`.
|
||||
class Tap
|
||||
extend Cachable
|
||||
|
||||
TAP_DIRECTORY = HOMEBREW_LIBRARY/"Taps"
|
||||
|
||||
CACHE = {}
|
||||
|
||||
def self.clear_cache
|
||||
CACHE.clear
|
||||
end
|
||||
|
||||
def self.fetch(*args)
|
||||
case args.length
|
||||
when 1
|
||||
@ -38,7 +35,7 @@ class Tap
|
||||
end
|
||||
|
||||
cache_key = "#{user}/#{repo}".downcase
|
||||
CACHE.fetch(cache_key) { |key| CACHE[key] = Tap.new(user, repo) }
|
||||
cache.fetch(cache_key) { |key| cache[key] = Tap.new(user, repo) }
|
||||
end
|
||||
|
||||
def self.from_path(path)
|
||||
|
@ -27,7 +27,7 @@ begin
|
||||
Timeout.timeout TEST_TIMEOUT_SECONDS do
|
||||
raise "test returned false" if formula.run_test == false
|
||||
end
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
Marshal.dump(e, error_pipe)
|
||||
error_pipe.close
|
||||
exit! 1
|
||||
|
@ -107,7 +107,7 @@ describe FormulaInstaller do
|
||||
end
|
||||
EOS
|
||||
|
||||
Formulary::FORMULAE.delete(dep_path)
|
||||
Formulary.cache.delete(dep_path)
|
||||
dependency = Formulary.factory(dep_name)
|
||||
|
||||
dependent = formula do
|
||||
|
@ -229,10 +229,9 @@ module Homebrew
|
||||
EOS
|
||||
end
|
||||
|
||||
# Hash of Module => Set(method_names)
|
||||
@injected_dump_stat_modules = {}
|
||||
|
||||
# rubocop:disable Style/GlobalVars
|
||||
def inject_dump_stats!(the_module, pattern)
|
||||
@injected_dump_stat_modules ||= {}
|
||||
@injected_dump_stat_modules[the_module] ||= []
|
||||
injected_methods = @injected_dump_stat_modules[the_module]
|
||||
the_module.module_eval do
|
||||
@ -260,6 +259,7 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
end
|
||||
# rubocop:enable Style/GlobalVars
|
||||
end
|
||||
|
||||
def with_system_path
|
||||
|
@ -14,7 +14,7 @@ module Utils
|
||||
read.close
|
||||
write.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
||||
yield
|
||||
rescue Exception => e
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
Marshal.dump(e, write)
|
||||
write.close
|
||||
exit!
|
||||
@ -26,8 +26,11 @@ module Utils
|
||||
ignore_interrupts(:quietly) do # the child will receive the interrupt and marshal it back
|
||||
begin
|
||||
socket = server.accept_nonblock
|
||||
# rubocop:disable Lint/ShadowedException
|
||||
# FIXME: https://github.com/bbatsov/rubocop/issues/4843
|
||||
rescue Errno::EAGAIN, Errno::EWOULDBLOCK, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR
|
||||
retry unless Process.waitpid(pid, Process::WNOHANG)
|
||||
# rubocop:enable Lint/ShadowedException
|
||||
else
|
||||
socket.send_io(write)
|
||||
socket.close
|
||||
@ -36,7 +39,7 @@ module Utils
|
||||
data = read.read
|
||||
read.close
|
||||
Process.wait(pid) unless socket.nil?
|
||||
raise Marshal.load(data) unless data.nil? || data.empty?
|
||||
raise Marshal.load(data) unless data.nil? || data.empty? # rubocop:disable Security/MarshalLoad
|
||||
raise Interrupt if $CHILD_STATUS.exitstatus == 130
|
||||
raise "Forked child process failed: #{$CHILD_STATUS}" unless $CHILD_STATUS.success?
|
||||
end
|
||||
|
@ -213,110 +213,6 @@ class Version
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(val)
|
||||
unless val.respond_to?(:to_str)
|
||||
raise TypeError, "Version value must be a string; got a #{val.class} (#{val})"
|
||||
end
|
||||
@version = val.to_str
|
||||
end
|
||||
|
||||
def detected_from_url?
|
||||
false
|
||||
end
|
||||
|
||||
def head?
|
||||
false
|
||||
end
|
||||
|
||||
def null?
|
||||
false
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
# Needed to retain API compatibility with older string comparisons
|
||||
# for compiler versions, etc.
|
||||
other = Version.new(other) if other.is_a? String
|
||||
# Used by the *_build_version comparisons, which formerly returned Fixnum
|
||||
other = Version.new(other.to_s) if other.is_a? Integer
|
||||
return 1 if other.nil?
|
||||
|
||||
return unless other.is_a?(Version)
|
||||
return 0 if version == other.version
|
||||
return 1 if head? && !other.head?
|
||||
return -1 if !head? && other.head?
|
||||
return 0 if head? && other.head?
|
||||
|
||||
ltokens = tokens
|
||||
rtokens = other.tokens
|
||||
max = max(ltokens.length, rtokens.length)
|
||||
l = r = 0
|
||||
|
||||
while l < max
|
||||
a = ltokens[l] || NULL_TOKEN
|
||||
b = rtokens[r] || NULL_TOKEN
|
||||
|
||||
if a == b
|
||||
l += 1
|
||||
r += 1
|
||||
next
|
||||
elsif a.numeric? && b.numeric?
|
||||
return a <=> b
|
||||
elsif a.numeric?
|
||||
return 1 if a > NULL_TOKEN
|
||||
l += 1
|
||||
elsif b.numeric?
|
||||
return -1 if b > NULL_TOKEN
|
||||
r += 1
|
||||
else
|
||||
return a <=> b
|
||||
end
|
||||
end
|
||||
|
||||
0
|
||||
end
|
||||
alias eql? ==
|
||||
|
||||
def hash
|
||||
version.hash
|
||||
end
|
||||
|
||||
def to_f
|
||||
version.to_f
|
||||
end
|
||||
|
||||
def to_s
|
||||
version.dup
|
||||
end
|
||||
alias to_str to_s
|
||||
|
||||
protected
|
||||
|
||||
attr_reader :version
|
||||
|
||||
def tokens
|
||||
@tokens ||= tokenize
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def max(a, b)
|
||||
(a > b) ? a : b
|
||||
end
|
||||
|
||||
def tokenize
|
||||
version.scan(SCAN_PATTERN).map! do |token|
|
||||
case token
|
||||
when /\A#{AlphaToken::PATTERN}\z/o then AlphaToken
|
||||
when /\A#{BetaToken::PATTERN}\z/o then BetaToken
|
||||
when /\A#{RCToken::PATTERN}\z/o then RCToken
|
||||
when /\A#{PreToken::PATTERN}\z/o then PreToken
|
||||
when /\A#{PatchToken::PATTERN}\z/o then PatchToken
|
||||
when /\A#{NumericToken::PATTERN}\z/o then NumericToken
|
||||
when /\A#{StringToken::PATTERN}\z/o then StringToken
|
||||
end.new(token)
|
||||
end
|
||||
end
|
||||
|
||||
def self.parse(spec)
|
||||
version = _parse(spec)
|
||||
version.nil? ? NULL : new(version)
|
||||
@ -461,6 +357,112 @@ class Version
|
||||
m = /[-.vV]?((?:\d+\.)+\d+(?:[-_.]?(?i:alpha|beta|pre|rc)\.?\d{,2})?)/.match(spec_s)
|
||||
return m.captures.first unless m.nil?
|
||||
end
|
||||
|
||||
private_class_method :_parse
|
||||
|
||||
def initialize(val)
|
||||
unless val.respond_to?(:to_str)
|
||||
raise TypeError, "Version value must be a string; got a #{val.class} (#{val})"
|
||||
end
|
||||
@version = val.to_str
|
||||
end
|
||||
|
||||
def detected_from_url?
|
||||
false
|
||||
end
|
||||
|
||||
def head?
|
||||
false
|
||||
end
|
||||
|
||||
def null?
|
||||
false
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
# Needed to retain API compatibility with older string comparisons
|
||||
# for compiler versions, etc.
|
||||
other = Version.new(other) if other.is_a? String
|
||||
# Used by the *_build_version comparisons, which formerly returned Fixnum
|
||||
other = Version.new(other.to_s) if other.is_a? Integer
|
||||
return 1 if other.nil?
|
||||
|
||||
return unless other.is_a?(Version)
|
||||
return 0 if version == other.version
|
||||
return 1 if head? && !other.head?
|
||||
return -1 if !head? && other.head?
|
||||
return 0 if head? && other.head?
|
||||
|
||||
ltokens = tokens
|
||||
rtokens = other.tokens
|
||||
max = max(ltokens.length, rtokens.length)
|
||||
l = r = 0
|
||||
|
||||
while l < max
|
||||
a = ltokens[l] || NULL_TOKEN
|
||||
b = rtokens[r] || NULL_TOKEN
|
||||
|
||||
if a == b
|
||||
l += 1
|
||||
r += 1
|
||||
next
|
||||
elsif a.numeric? && b.numeric?
|
||||
return a <=> b
|
||||
elsif a.numeric?
|
||||
return 1 if a > NULL_TOKEN
|
||||
l += 1
|
||||
elsif b.numeric?
|
||||
return -1 if b > NULL_TOKEN
|
||||
r += 1
|
||||
else
|
||||
return a <=> b
|
||||
end
|
||||
end
|
||||
|
||||
0
|
||||
end
|
||||
alias eql? ==
|
||||
|
||||
def hash
|
||||
version.hash
|
||||
end
|
||||
|
||||
def to_f
|
||||
version.to_f
|
||||
end
|
||||
|
||||
def to_s
|
||||
version.dup
|
||||
end
|
||||
alias to_str to_s
|
||||
|
||||
protected
|
||||
|
||||
attr_reader :version
|
||||
|
||||
def tokens
|
||||
@tokens ||= tokenize
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def max(a, b)
|
||||
(a > b) ? a : b
|
||||
end
|
||||
|
||||
def tokenize
|
||||
version.scan(SCAN_PATTERN).map! do |token|
|
||||
case token
|
||||
when /\A#{AlphaToken::PATTERN}\z/o then AlphaToken
|
||||
when /\A#{BetaToken::PATTERN}\z/o then BetaToken
|
||||
when /\A#{RCToken::PATTERN}\z/o then RCToken
|
||||
when /\A#{PreToken::PATTERN}\z/o then PreToken
|
||||
when /\A#{PatchToken::PATTERN}\z/o then PatchToken
|
||||
when /\A#{NumericToken::PATTERN}\z/o then NumericToken
|
||||
when /\A#{StringToken::PATTERN}\z/o then StringToken
|
||||
end.new(token)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class HeadVersion < Version
|
||||
|
Loading…
x
Reference in New Issue
Block a user