commit
246bb1a3b1
@ -4,6 +4,8 @@ inherit_from:
|
||||
|
||||
AllCops:
|
||||
TargetRubyVersion: 2.0
|
||||
Include:
|
||||
- '**/.simplecov'
|
||||
Exclude:
|
||||
- 'Homebrew/cask/**/*'
|
||||
- 'Homebrew/vendor/**/*'
|
||||
|
||||
@ -7,6 +7,14 @@ Style/StringLiterals:
|
||||
Style/StringLiteralsInInterpolation:
|
||||
EnforcedStyle: double_quotes
|
||||
|
||||
# only for numbers >= 1_000_000
|
||||
Style/NumericLiterals:
|
||||
MinDigits: 7
|
||||
|
||||
# zero-prefixed octal literals are just too widely used (and mostly understood)
|
||||
Style/NumericLiteralPrefix:
|
||||
EnforcedOctalStyle: zero_only
|
||||
|
||||
# percent-x is allowed for multiline
|
||||
Style/CommandLiteral:
|
||||
EnforcedStyle: mixed
|
||||
@ -58,14 +66,6 @@ Lint/ParenthesesAsGroupedExpression:
|
||||
Style/EmptyLineBetweenDefs:
|
||||
AllowAdjacentOneLineDefs: true
|
||||
|
||||
# port numbers and such tech stuff
|
||||
Style/NumericLiterals:
|
||||
Enabled: false
|
||||
|
||||
# zero-prefixed octal literals are just too widely used (and mostly understood)
|
||||
Style/NumericLiteralPrefix:
|
||||
EnforcedOctalStyle: zero_only
|
||||
|
||||
# consistency and readability when faced with string interpolation
|
||||
Style/PercentLiteralDelimiters:
|
||||
PreferredDelimiters:
|
||||
@ -93,15 +93,31 @@ Style/AlignParameters:
|
||||
|
||||
# counterproductive in formulas, notably within the install method
|
||||
Style/GuardClause:
|
||||
Enabled: false
|
||||
Exclude:
|
||||
- 'Taps/**/*'
|
||||
Style/IfUnlessModifier:
|
||||
Exclude:
|
||||
- 'Taps/**/*'
|
||||
|
||||
# TODO: enforce when rubocop has fixed this
|
||||
# https://github.com/bbatsov/rubocop/issues/3516
|
||||
Style/VariableNumber:
|
||||
Enabled: false
|
||||
|
||||
# TODO: enforce when rubocop has shipped this
|
||||
# https://github.com/bbatsov/rubocop/pull/3513
|
||||
Style/TernaryParentheses:
|
||||
Enabled: false
|
||||
|
||||
# dashes in filenames are typical
|
||||
# TODO: enforce when rubocop has fixed this
|
||||
# https://github.com/bbatsov/rubocop/issues/1545
|
||||
Style/FileName:
|
||||
Enabled: false
|
||||
# matches:
|
||||
# file_name.rb (default)
|
||||
# file-name.rb, --filename.rb (command names)
|
||||
# FILENAME.rb (ARGV and ENV)
|
||||
# does not match:
|
||||
# dashes-and_underscores.rb
|
||||
Regex: !ruby/regexp /^((([\dA-Z]+|[\da-z]+)(_([\dA-Z]+|[\da-z]+))*|(\-\-)?([\dA-Z]+|[\da-z]+)(-([\dA-Z]+|[\da-z]+))*))(\.rb)?$/
|
||||
|
||||
# no percent word array, being friendly to non-ruby users
|
||||
# TODO: enforce when rubocop has fixed this
|
||||
@ -134,6 +150,7 @@ Style/MethodName:
|
||||
Style/PredicateName:
|
||||
Exclude:
|
||||
- 'Homebrew/compat/**/*'
|
||||
NameWhitelist: is_32_bit?, is_64_bit?
|
||||
|
||||
# `formula do` uses nested method definitions
|
||||
Lint/NestedMethodDefinition:
|
||||
|
||||
@ -1,21 +1,11 @@
|
||||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config --exclude-limit 30`
|
||||
# on 2016-09-18 15:15:22 +0100 using RuboCop version 0.41.2.
|
||||
# `rubocop --auto-gen-config --exclude-limit 100`
|
||||
# on 2016-09-22 20:07:41 +0200 using RuboCop version 0.43.0.
|
||||
# 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: 4
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AlignWith, SupportedStyles, AutoCorrect.
|
||||
# SupportedStyles: keyword, variable, start_of_line
|
||||
Lint/EndAlignment:
|
||||
Exclude:
|
||||
- 'Homebrew/download_strategy.rb'
|
||||
- 'Homebrew/keg.rb'
|
||||
- 'Homebrew/os/mac/cctools_mach.rb'
|
||||
|
||||
# Offense count: 18
|
||||
Lint/HandleExceptions:
|
||||
Exclude:
|
||||
@ -52,11 +42,6 @@ Lint/NestedMethodDefinition:
|
||||
- 'Homebrew/dev-cmd/bottle.rb'
|
||||
- 'Homebrew/dev-cmd/test-bot.rb'
|
||||
|
||||
# Offense count: 2
|
||||
Lint/NonLocalExitFromIterator:
|
||||
Exclude:
|
||||
- 'Homebrew/extend/pathname.rb'
|
||||
|
||||
# Offense count: 28
|
||||
Lint/RescueException:
|
||||
Exclude:
|
||||
@ -80,12 +65,7 @@ Lint/RescueException:
|
||||
# Offense count: 1
|
||||
Lint/ShadowedException:
|
||||
Exclude:
|
||||
- 'Homebrew/brew.rb'
|
||||
|
||||
# Offense count: 2
|
||||
Lint/UselessAssignment:
|
||||
Exclude:
|
||||
- 'Homebrew/requirements.rb'
|
||||
- 'Homebrew/utils/fork.rb'
|
||||
|
||||
# Offense count: 18
|
||||
Metrics/BlockNesting:
|
||||
@ -94,19 +74,13 @@ Metrics/BlockNesting:
|
||||
# Offense count: 20
|
||||
# Configuration parameters: CountComments.
|
||||
Metrics/ModuleLength:
|
||||
Max: 400
|
||||
Max: 370
|
||||
|
||||
# Offense count: 1
|
||||
# Offense count: 2
|
||||
# Configuration parameters: CountKeywordArgs.
|
||||
Metrics/ParameterLists:
|
||||
Max: 6
|
||||
|
||||
# Offense count: 2
|
||||
Performance/FixedSize:
|
||||
Exclude:
|
||||
- 'Homebrew/dev-cmd/audit.rb'
|
||||
- 'Homebrew/dev-cmd/bottle.rb'
|
||||
|
||||
# Offense count: 8
|
||||
Style/AccessorMethodName:
|
||||
Exclude:
|
||||
@ -125,33 +99,10 @@ Style/Alias:
|
||||
Exclude:
|
||||
- 'Homebrew/blacklist.rb'
|
||||
|
||||
# Offense count: 26
|
||||
# Offense count: 1
|
||||
Style/CaseEquality:
|
||||
Exclude:
|
||||
- 'Homebrew/cleanup.rb'
|
||||
- 'Homebrew/cmd/search.rb'
|
||||
- 'Homebrew/compilers.rb'
|
||||
- 'Homebrew/cxxstdlib.rb'
|
||||
- 'Homebrew/debrew.rb'
|
||||
- 'Homebrew/dependencies.rb'
|
||||
- 'Homebrew/dependency_collector.rb'
|
||||
- 'Homebrew/download_strategy.rb'
|
||||
- 'Homebrew/formula.rb'
|
||||
- 'Homebrew/options.rb'
|
||||
- 'Homebrew/patch.rb'
|
||||
- 'Homebrew/pkg_version.rb'
|
||||
- 'Homebrew/requirement.rb'
|
||||
- 'Homebrew/requirements.rb'
|
||||
- 'Homebrew/software_spec.rb'
|
||||
- 'Homebrew/version.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: IndentWhenRelativeTo, SupportedStyles, IndentOneStep, IndentationWidth.
|
||||
# SupportedStyles: case, end
|
||||
Style/CaseIndentation:
|
||||
Exclude:
|
||||
- 'Homebrew/keg.rb'
|
||||
|
||||
# Offense count: 11
|
||||
Style/ClassVars:
|
||||
@ -168,17 +119,6 @@ Style/ConstantName:
|
||||
Exclude:
|
||||
- 'Homebrew/os/mac.rb'
|
||||
|
||||
# Offense count: 10
|
||||
Style/DoubleNegation:
|
||||
Exclude:
|
||||
- 'Homebrew/extend/ARGV.rb'
|
||||
- 'Homebrew/formula_installer.rb'
|
||||
- 'Homebrew/os/mac/cctools_keg.rb'
|
||||
- 'Homebrew/os/mac/ruby_keg.rb'
|
||||
- 'Homebrew/os/mac/xcode.rb'
|
||||
- 'Homebrew/requirement.rb'
|
||||
- 'Homebrew/software_spec.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: format, sprintf, percent
|
||||
@ -193,22 +133,57 @@ Style/GlobalVars:
|
||||
- 'Homebrew/diagnostic.rb'
|
||||
- 'Homebrew/utils.rb'
|
||||
|
||||
# Offense count: 2
|
||||
Style/IdenticalConditionalBranches:
|
||||
# Offense count: 70
|
||||
# Configuration parameters: MinBodyLength.
|
||||
Style/GuardClause:
|
||||
Exclude:
|
||||
- 'Homebrew/formula_lock.rb'
|
||||
|
||||
# Offense count: 5
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: snake_case, camelCase
|
||||
Style/MethodName:
|
||||
Exclude:
|
||||
- 'Homebrew/compat/**/*'
|
||||
- 'Homebrew/cleanup.rb'
|
||||
- 'Homebrew/diagnostic.rb'
|
||||
- 'Homebrew/formula_cellar_checks.rb'
|
||||
- 'Taps/**/*'
|
||||
- 'Homebrew/cmd/update-report.rb'
|
||||
- 'Homebrew/dependency_collector.rb'
|
||||
- 'Homebrew/dev-cmd/audit.rb'
|
||||
- 'Homebrew/dev-cmd/pull.rb'
|
||||
- 'Homebrew/dev-cmd/test-bot.rb'
|
||||
- 'Homebrew/download_strategy.rb'
|
||||
- 'Homebrew/extend/ARGV.rb'
|
||||
- 'Homebrew/extend/ENV/shared.rb'
|
||||
- 'Homebrew/extend/ENV/std.rb'
|
||||
- 'Homebrew/extend/ENV/super.rb'
|
||||
- 'Homebrew/extend/fileutils.rb'
|
||||
- 'Homebrew/extend/os/mac/extend/ENV/std.rb'
|
||||
- 'Homebrew/extend/os/mac/formula_cellar_checks.rb'
|
||||
- 'Homebrew/extend/os/mac/utils/bottles.rb'
|
||||
- 'Homebrew/extend/string.rb'
|
||||
- 'Homebrew/formula.rb'
|
||||
- 'Homebrew/formula_installer.rb'
|
||||
- 'Homebrew/os/mac/cctools_mach.rb'
|
||||
- 'Homebrew/formula_lock.rb'
|
||||
- 'Homebrew/formulary.rb'
|
||||
- 'Homebrew/keg.rb'
|
||||
- 'Homebrew/migrator.rb'
|
||||
- 'Homebrew/os/mac/xcode.rb'
|
||||
- 'Homebrew/patch.rb'
|
||||
- 'Homebrew/requirement.rb'
|
||||
- 'Homebrew/tap.rb'
|
||||
- 'Homebrew/test/test_cmd_testbot.rb'
|
||||
- 'Homebrew/test/test_integration_cmds.rb'
|
||||
- 'Homebrew/test/testing_env.rb'
|
||||
- 'Homebrew/utils.rb'
|
||||
- 'Homebrew/utils/popen.rb'
|
||||
- 'Homebrew/version.rb'
|
||||
|
||||
# Offense count: 51
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: MaxLineLength.
|
||||
Style/IfUnlessModifier:
|
||||
Exclude:
|
||||
- 'Taps/**/*'
|
||||
- 'Homebrew/dev-cmd/audit.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: SupportedStyles, IndentationWidth.
|
||||
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
||||
Style/IndentArray:
|
||||
EnforcedStyle: special_inside_parentheses
|
||||
|
||||
# Offense count: 7
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
@ -241,14 +216,6 @@ Style/MutableConstant:
|
||||
- 'Homebrew/tab.rb'
|
||||
- 'Homebrew/tap.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
|
||||
# SupportedStyles: skip_modifier_ifs, always
|
||||
Style/Next:
|
||||
Exclude:
|
||||
- 'Homebrew/dev-cmd/test-bot.rb'
|
||||
|
||||
# Offense count: 9
|
||||
Style/OpMethod:
|
||||
Exclude:
|
||||
@ -257,37 +224,9 @@ Style/OpMethod:
|
||||
- 'Homebrew/install_renamed.rb'
|
||||
- 'Homebrew/options.rb'
|
||||
|
||||
# Offense count: 4
|
||||
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
||||
# NamePrefix: is_, has_, have_
|
||||
# NamePrefixBlacklist: is_, has_, have_
|
||||
# NameWhitelist: is_a?
|
||||
Style/PredicateName:
|
||||
Exclude:
|
||||
- 'Homebrew/compat/**/*'
|
||||
- 'Homebrew/download_strategy.rb'
|
||||
- 'Homebrew/hardware.rb'
|
||||
|
||||
# Offense count: 7
|
||||
# Offense count: 2
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
||||
# SupportedStyles: slashes, percent_r, mixed
|
||||
Style/RegexpLiteral:
|
||||
Exclude:
|
||||
- 'Homebrew/diagnostic.rb'
|
||||
- 'Homebrew/keg.rb'
|
||||
- 'Homebrew/version.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AllowAsExpressionSeparator.
|
||||
Style/Semicolon:
|
||||
Exclude:
|
||||
- 'Homebrew/descriptions.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: Methods.
|
||||
# Methods: {"reduce"=>["a", "e"]}, {"inject"=>["a", "e"]}
|
||||
Style/SingleLineBlockParams:
|
||||
Exclude:
|
||||
- 'Homebrew/diagnostic.rb'
|
||||
# Configuration parameters: SupportedStyles.
|
||||
# SupportedStyles: use_perl_names, use_english_names
|
||||
Style/SpecialGlobalVars:
|
||||
EnforcedStyle: use_perl_names
|
||||
|
||||
@ -37,9 +37,9 @@ begin
|
||||
cmd = nil
|
||||
|
||||
ARGV.dup.each_with_index do |arg, i|
|
||||
if help_flag && cmd
|
||||
break
|
||||
elsif help_flag_list.include?(arg)
|
||||
break if help_flag && cmd
|
||||
|
||||
if help_flag_list.include?(arg)
|
||||
# Option-style help: Both `--help <cmd>` and `<cmd> --help` are fine.
|
||||
help_flag = true
|
||||
elsif arg == "help" && !cmd
|
||||
|
||||
@ -31,9 +31,8 @@ class Build
|
||||
def post_superenv_hacks
|
||||
# Only allow Homebrew-approved directories into the PATH, unless
|
||||
# a formula opts-in to allowing the user's path.
|
||||
if formula.env.userpaths? || reqs.any? { |rq| rq.env.userpaths? }
|
||||
ENV.userpaths!
|
||||
end
|
||||
return unless formula.env.userpaths? || reqs.any? { |rq| rq.env.userpaths? }
|
||||
ENV.userpaths!
|
||||
end
|
||||
|
||||
def effective_build_options_for(dependent)
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
require: 'rubocop-cask'
|
||||
|
||||
AllCops:
|
||||
TargetRubyVersion: 2.0
|
||||
Exclude:
|
||||
- '**/.simplecov'
|
||||
- '**/Casks/**/*'
|
||||
- 'developer/**/*'
|
||||
- '**/vendor/**/*'
|
||||
|
||||
Metrics/AbcSize:
|
||||
@ -16,10 +14,10 @@ Metrics/ClassLength:
|
||||
Metrics/CyclomaticComplexity:
|
||||
Enabled: false
|
||||
|
||||
Metrics/MethodLength:
|
||||
Metrics/LineLength:
|
||||
Enabled: false
|
||||
|
||||
Metrics/PerceivedComplexity:
|
||||
Metrics/MethodLength:
|
||||
Enabled: false
|
||||
|
||||
Metrics/ModuleLength:
|
||||
@ -29,6 +27,16 @@ Metrics/ModuleLength:
|
||||
- 'lib/hbc/macos.rb'
|
||||
- 'lib/hbc/utils.rb'
|
||||
|
||||
Metrics/PerceivedComplexity:
|
||||
Enabled: false
|
||||
|
||||
Style/AlignHash:
|
||||
EnforcedHashRocketStyle: table
|
||||
EnforcedColonStyle: table
|
||||
|
||||
Style/BarePercentLiterals:
|
||||
EnforcedStyle: percent_q
|
||||
|
||||
Style/BlockDelimiters:
|
||||
EnforcedStyle: semantic
|
||||
FunctionalMethods:
|
||||
@ -59,6 +67,8 @@ Style/BlockDelimiters:
|
||||
- chdir
|
||||
- context
|
||||
- create
|
||||
- define_method
|
||||
- define_singleton_method
|
||||
- each_with_object
|
||||
- fork
|
||||
- measure
|
||||
@ -75,15 +85,47 @@ Style/BlockDelimiters:
|
||||
- lambda
|
||||
- proc
|
||||
|
||||
|
||||
Style/ClassAndModuleChildren:
|
||||
EnforcedStyle: compact
|
||||
|
||||
Style/PredicateName:
|
||||
NameWhitelist: is_32_bit?, is_64_bit?
|
||||
Style/Documentation:
|
||||
Enabled: false
|
||||
|
||||
Style/FileName:
|
||||
Regex: !ruby/regexp /^((([\dA-Z]+|[\da-z]+)(_([\dA-Z]+|[\da-z]+))*|(\-\-)?([\dA-Z]+|[\da-z]+)(-([\dA-Z]+|[\da-z]+))*))(\.rb)?$/
|
||||
|
||||
Style/HashSyntax:
|
||||
EnforcedStyle: ruby19_no_mixed_keys
|
||||
|
||||
Style/IndentArray:
|
||||
EnforcedStyle: align_brackets
|
||||
|
||||
Style/IndentHash:
|
||||
EnforcedStyle: align_braces
|
||||
|
||||
Style/PercentLiteralDelimiters:
|
||||
PreferredDelimiters:
|
||||
'%': '{}'
|
||||
'%i': '{}'
|
||||
'%q': '{}'
|
||||
'%Q': '{}'
|
||||
'%r': '{}'
|
||||
'%s': '()'
|
||||
'%w': '[]'
|
||||
'%W': '[]'
|
||||
'%x': '()'
|
||||
|
||||
Style/RaiseArgs:
|
||||
EnforcedStyle: exploded
|
||||
|
||||
Style/RegexpLiteral:
|
||||
EnforcedStyle: percent_r
|
||||
|
||||
Style/StringLiterals:
|
||||
EnforcedStyle: double_quotes
|
||||
|
||||
Style/StringLiteralsInInterpolation:
|
||||
EnforcedStyle: double_quotes
|
||||
|
||||
Style/TrailingCommaInLiteral:
|
||||
EnforcedStyleForMultiline: comma
|
||||
|
||||
@ -7,10 +7,6 @@ group :debug do
|
||||
gem "pry-byebug", platforms: :mri
|
||||
end
|
||||
|
||||
group :development do
|
||||
gem "rubocop-cask", "~> 0.8.3"
|
||||
end
|
||||
|
||||
group :test do
|
||||
# This is SimpleCov v0.12.0 with two fixes merged on top, that finally resolve
|
||||
# all issues with parallel tests, uncovered files, and tracked files. Switch
|
||||
|
||||
@ -12,7 +12,6 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
ansi (1.5.0)
|
||||
ast (2.3.0)
|
||||
builder (3.2.2)
|
||||
byebug (9.0.5)
|
||||
codecov (0.1.5)
|
||||
@ -36,9 +35,6 @@ GEM
|
||||
parallel (1.9.0)
|
||||
parallel_tests (2.9.0)
|
||||
parallel
|
||||
parser (2.3.1.2)
|
||||
ast (~> 2.2)
|
||||
powerpack (0.1.1)
|
||||
pry (0.10.4)
|
||||
coderay (~> 1.1.0)
|
||||
method_source (~> 0.8.1)
|
||||
@ -46,8 +42,6 @@ GEM
|
||||
pry-byebug (3.4.0)
|
||||
byebug (~> 9.0)
|
||||
pry (~> 0.10)
|
||||
public_suffix (2.0.2)
|
||||
rainbow (2.1.0)
|
||||
rake (10.4.2)
|
||||
rspec (3.0.0)
|
||||
rspec-core (~> 3.0.0)
|
||||
@ -66,19 +60,9 @@ GEM
|
||||
rspec-support (3.0.4)
|
||||
rspec-wait (0.0.9)
|
||||
rspec (>= 3, < 4)
|
||||
rubocop (0.41.2)
|
||||
parser (>= 2.3.1.1, < 3.0)
|
||||
powerpack (~> 0.1)
|
||||
rainbow (>= 1.99.1, < 3.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (~> 1.0, >= 1.0.1)
|
||||
rubocop-cask (0.8.3)
|
||||
public_suffix (~> 2.0)
|
||||
rubocop (~> 0.41.1)
|
||||
ruby-progressbar (1.8.1)
|
||||
simplecov-html (0.10.0)
|
||||
slop (3.6.0)
|
||||
unicode-display_width (1.1.0)
|
||||
url (0.3.2)
|
||||
|
||||
PLATFORMS
|
||||
@ -96,7 +80,6 @@ DEPENDENCIES
|
||||
rspec (~> 3.0.0)
|
||||
rspec-its
|
||||
rspec-wait
|
||||
rubocop-cask (~> 0.8.3)
|
||||
simplecov (= 0.12.0)!
|
||||
|
||||
BUNDLED WITH
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
require "rake/testtask"
|
||||
require "rspec/core/rake_task"
|
||||
require "rubocop/rake_task"
|
||||
|
||||
homebrew_repo = `brew --repository`.chomp
|
||||
$LOAD_PATH.unshift(File.expand_path("#{homebrew_repo}/Library/Homebrew"))
|
||||
@ -18,12 +17,6 @@ namespace :test do
|
||||
end
|
||||
end
|
||||
|
||||
RuboCop::RakeTask.new(:rubocop) do |t|
|
||||
t.options = ["--force-exclusion"]
|
||||
end
|
||||
|
||||
task default: [:rubocop]
|
||||
|
||||
desc "Open a REPL for debugging and experimentation"
|
||||
task :console do
|
||||
require "pry"
|
||||
|
||||
@ -10,7 +10,7 @@ class Hbc::Artifact::AbstractFlightBlock < Hbc::Artifact::Base
|
||||
end
|
||||
|
||||
def self.class_for_dsl_key(dsl_key)
|
||||
Object.const_get("Hbc::DSL::#{dsl_key.to_s.split('_').collect(&:capitalize).join}")
|
||||
Object.const_get("Hbc::DSL::#{dsl_key.to_s.split("_").collect(&:capitalize).join}")
|
||||
end
|
||||
|
||||
def self.me?(cask)
|
||||
|
||||
@ -64,9 +64,9 @@ class Hbc::Artifact::Moved < Hbc::Artifact::Relocated
|
||||
|
||||
def delete
|
||||
ohai "Removing #{self.class.artifact_english_name}: '#{target}'"
|
||||
if MacOS.undeletable?(target)
|
||||
raise Hbc::CaskError, "Cannot remove undeletable #{self.class.artifact_english_name}"
|
||||
elsif force
|
||||
raise Hbc::CaskError, "Cannot remove undeletable #{self.class.artifact_english_name}" if MacOS.undeletable?(target)
|
||||
|
||||
if force
|
||||
Hbc::Utils.gain_permissions_remove(target, command: @command)
|
||||
else
|
||||
target.rmtree
|
||||
|
||||
@ -3,32 +3,32 @@ module Hbc::Cache
|
||||
|
||||
def ensure_cache_exists
|
||||
return if Hbc.cache.exist?
|
||||
|
||||
odebug "Creating Cache at #{Hbc.cache}"
|
||||
Hbc.cache.mkpath
|
||||
end
|
||||
|
||||
def migrate_legacy_cache
|
||||
if Hbc.legacy_cache.exist?
|
||||
ohai "Migrating cached files to #{Hbc.cache}..."
|
||||
return unless Hbc.legacy_cache.exist?
|
||||
|
||||
Hbc.legacy_cache.children.select(&:symlink?).each do |symlink|
|
||||
file = symlink.readlink
|
||||
ohai "Migrating cached files to #{Hbc.cache}..."
|
||||
Hbc.legacy_cache.children.select(&:symlink?).each do |symlink|
|
||||
file = symlink.readlink
|
||||
|
||||
new_name = file.basename
|
||||
.sub(%r{\-((?:(\d|#{Hbc::DSL::Version::DIVIDER_REGEX})*\-\2*)*[^\-]+)$}x,
|
||||
'--\1')
|
||||
new_name = file.basename
|
||||
.sub(%r{\-((?:(\d|#{Hbc::DSL::Version::DIVIDER_REGEX})*\-\2*)*[^\-]+)$}x,
|
||||
'--\1')
|
||||
|
||||
renamed_file = Hbc.cache.join(new_name)
|
||||
renamed_file = Hbc.cache.join(new_name)
|
||||
|
||||
if file.exist?
|
||||
puts "#{file} -> #{renamed_file}"
|
||||
FileUtils.mv(file, renamed_file)
|
||||
end
|
||||
|
||||
FileUtils.rm(symlink)
|
||||
if file.exist?
|
||||
puts "#{file} -> #{renamed_file}"
|
||||
FileUtils.mv(file, renamed_file)
|
||||
end
|
||||
|
||||
FileUtils.remove_entry_secure(Hbc.legacy_cache)
|
||||
FileUtils.rm(symlink)
|
||||
end
|
||||
|
||||
FileUtils.remove_entry_secure(Hbc.legacy_cache)
|
||||
end
|
||||
end
|
||||
|
||||
@ -87,28 +87,29 @@ class Hbc::Cask
|
||||
end
|
||||
|
||||
def dumpcask
|
||||
if Hbc.respond_to?(:debug) && Hbc.debug
|
||||
odebug "Cask instance dumps in YAML:"
|
||||
odebug "Cask instance toplevel:", to_yaml
|
||||
[
|
||||
:name,
|
||||
:homepage,
|
||||
:url,
|
||||
:appcast,
|
||||
:version,
|
||||
:license,
|
||||
:sha256,
|
||||
:artifacts,
|
||||
:caveats,
|
||||
:depends_on,
|
||||
:conflicts_with,
|
||||
:container,
|
||||
:gpg,
|
||||
:accessibility_access,
|
||||
:auto_updates,
|
||||
].each do |method|
|
||||
odebug "Cask instance method '#{method}':", send(method).to_yaml
|
||||
end
|
||||
return unless Hbc.respond_to?(:debug)
|
||||
return unless Hbc.debug
|
||||
|
||||
odebug "Cask instance dumps in YAML:"
|
||||
odebug "Cask instance toplevel:", to_yaml
|
||||
[
|
||||
:name,
|
||||
:homepage,
|
||||
:url,
|
||||
:appcast,
|
||||
:version,
|
||||
:license,
|
||||
:sha256,
|
||||
:artifacts,
|
||||
:caveats,
|
||||
:depends_on,
|
||||
:conflicts_with,
|
||||
:container,
|
||||
:gpg,
|
||||
:accessibility_access,
|
||||
:auto_updates,
|
||||
].each do |method|
|
||||
odebug "Cask instance method '#{method}':", send(method).to_yaml
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -3,39 +3,39 @@ module Hbc::Caskroom
|
||||
|
||||
def migrate_caskroom_from_repo_to_prefix
|
||||
repo_caskroom = Hbc.homebrew_repository.join("Caskroom")
|
||||
if !Hbc.caskroom.exist? && repo_caskroom.directory?
|
||||
ohai "Moving Caskroom from HOMEBREW_REPOSITORY to HOMEBREW_PREFIX"
|
||||
return if Hbc.caskroom.exist?
|
||||
return unless repo_caskroom.directory?
|
||||
|
||||
if Hbc.caskroom.parent.writable?
|
||||
FileUtils.mv repo_caskroom, Hbc.caskroom
|
||||
else
|
||||
opoo "#{Hbc.caskroom.parent} is not writable, sudo is needed to move the Caskroom."
|
||||
system "/usr/bin/sudo", "--", "/bin/mv", "--", repo_caskroom.to_s, Hbc.caskroom.parent.to_s
|
||||
end
|
||||
ohai "Moving Caskroom from HOMEBREW_REPOSITORY to HOMEBREW_PREFIX"
|
||||
|
||||
if Hbc.caskroom.parent.writable?
|
||||
FileUtils.mv repo_caskroom, Hbc.caskroom
|
||||
else
|
||||
opoo "#{Hbc.caskroom.parent} is not writable, sudo is needed to move the Caskroom."
|
||||
system "/usr/bin/sudo", "--", "/bin/mv", "--", repo_caskroom.to_s, Hbc.caskroom.parent.to_s
|
||||
end
|
||||
end
|
||||
|
||||
def ensure_caskroom_exists
|
||||
unless Hbc.caskroom.exist?
|
||||
ohai "Creating Caskroom at #{Hbc.caskroom}"
|
||||
return if Hbc.caskroom.exist?
|
||||
|
||||
if Hbc.caskroom.parent.writable?
|
||||
Hbc.caskroom.mkpath
|
||||
else
|
||||
ohai "We'll set permissions properly so we won't need sudo in the future"
|
||||
toplevel_dir = Hbc.caskroom
|
||||
toplevel_dir = toplevel_dir.parent until toplevel_dir.parent.root?
|
||||
unless toplevel_dir.directory?
|
||||
# If a toplevel dir such as '/opt' must be created, enforce standard permissions.
|
||||
# sudo in system is rude.
|
||||
system "/usr/bin/sudo", "--", "/bin/mkdir", "--", toplevel_dir
|
||||
system "/usr/bin/sudo", "--", "/bin/chmod", "--", "0775", toplevel_dir
|
||||
end
|
||||
ohai "Creating Caskroom at #{Hbc.caskroom}"
|
||||
if Hbc.caskroom.parent.writable?
|
||||
Hbc.caskroom.mkpath
|
||||
else
|
||||
ohai "We'll set permissions properly so we won't need sudo in the future"
|
||||
toplevel_dir = Hbc.caskroom
|
||||
toplevel_dir = toplevel_dir.parent until toplevel_dir.parent.root?
|
||||
unless toplevel_dir.directory?
|
||||
# If a toplevel dir such as '/opt' must be created, enforce standard permissions.
|
||||
# sudo in system is rude.
|
||||
system "/usr/bin/sudo", "--", "/bin/mkdir", "-p", "--", Hbc.caskroom
|
||||
unless Hbc.caskroom.parent == toplevel_dir
|
||||
system "/usr/bin/sudo", "--", "/usr/sbin/chown", "-R", "--", "#{Hbc::Utils.current_user}:staff", Hbc.caskroom.parent.to_s
|
||||
end
|
||||
system "/usr/bin/sudo", "--", "/bin/mkdir", "--", toplevel_dir
|
||||
system "/usr/bin/sudo", "--", "/bin/chmod", "--", "0775", toplevel_dir
|
||||
end
|
||||
# sudo in system is rude.
|
||||
system "/usr/bin/sudo", "--", "/bin/mkdir", "-p", "--", Hbc.caskroom
|
||||
unless Hbc.caskroom.parent == toplevel_dir
|
||||
system "/usr/bin/sudo", "--", "/usr/sbin/chown", "-R", "--", "#{Hbc::Utils.current_user}:staff", Hbc.caskroom.parent.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -117,11 +117,11 @@ class Hbc::CLI
|
||||
rescue NameError
|
||||
nil
|
||||
end
|
||||
|
||||
if klass.respond_to?(:run)
|
||||
# invoke "run" on a Ruby library which follows our coding conventions
|
||||
klass.run(*rest)
|
||||
else
|
||||
# other Ruby libraries must do everything via "require"
|
||||
klass.run(*rest)
|
||||
end
|
||||
elsif Hbc::Utils.which "brewcask-#{command}"
|
||||
# arbitrary external executable on PATH, Homebrew-style
|
||||
|
||||
@ -6,7 +6,7 @@ class Hbc::CLI::Audit < Hbc::CLI::Base
|
||||
def self.run(*args)
|
||||
failed_casks = new(args, Hbc::Auditor).run
|
||||
return if failed_casks.empty?
|
||||
raise Hbc::CaskError, "audit failed for casks: #{failed_casks.join(' ')}"
|
||||
raise Hbc::CaskError, "audit failed for casks: #{failed_casks.join(" ")}"
|
||||
end
|
||||
|
||||
def initialize(args, auditor)
|
||||
|
||||
@ -65,7 +65,7 @@ class Hbc::CLI::Cleanup < Hbc::CLI::Base
|
||||
|
||||
def remove_cache_files(*tokens)
|
||||
message = "Removing cached downloads"
|
||||
message.concat " for #{tokens.join(', ')}" unless tokens.empty?
|
||||
message.concat " for #{tokens.join(", ")}" unless tokens.empty?
|
||||
message.concat " older than #{OUTDATED_DAYS} days old" if outdated_only
|
||||
ohai message
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ class Hbc::CLI::Doctor < Hbc::CLI::Base
|
||||
if homebrew_origin !~ %r{\S}
|
||||
homebrew_origin = "#{none_string} #{error_string}"
|
||||
elsif homebrew_origin !~ %r{(mxcl|Homebrew)/(home)?brew(\.git)?\Z}
|
||||
homebrew_origin.concat " #{error_string 'warning: nonstandard origin'}"
|
||||
homebrew_origin.concat " #{error_string "warning: nonstandard origin"}"
|
||||
end
|
||||
rescue StandardError
|
||||
homebrew_origin = error_string "Not Found - Error running git"
|
||||
@ -106,7 +106,7 @@ class Hbc::CLI::Doctor < Hbc::CLI::Base
|
||||
end
|
||||
|
||||
def self.privileged_uid
|
||||
Process.euid == 0 ? "Yes #{error_string 'warning: not recommended'}" : "No"
|
||||
Process.euid.zero? ? "Yes #{error_string "warning: not recommended"}" : "No"
|
||||
rescue StandardError
|
||||
notfound_string
|
||||
end
|
||||
@ -143,7 +143,7 @@ class Hbc::CLI::Doctor < Hbc::CLI::Base
|
||||
if dir.nil? || dir.to_s.empty?
|
||||
none_string
|
||||
elsif dir.to_s.match(legacy_tap_pattern)
|
||||
dir.to_s.concat(" #{error_string 'Warning: legacy tap path'}")
|
||||
dir.to_s.concat(" #{error_string "Warning: legacy tap path"}")
|
||||
else
|
||||
dir.to_s
|
||||
end
|
||||
@ -175,9 +175,9 @@ class Hbc::CLI::Doctor < Hbc::CLI::Base
|
||||
def self.render_staging_location(path)
|
||||
path = Pathname.new(path)
|
||||
if !path.exist?
|
||||
"#{path} #{error_string 'error: path does not exist'}}"
|
||||
"#{path} #{error_string "error: path does not exist"}}"
|
||||
elsif !path.writable?
|
||||
"#{path} #{error_string 'error: not writable by current user'}"
|
||||
"#{path} #{error_string "error: not writable by current user"}"
|
||||
else
|
||||
path
|
||||
end
|
||||
|
||||
@ -36,7 +36,7 @@ class Hbc::CLI::Install < Hbc::CLI::Base
|
||||
count += 1
|
||||
end
|
||||
end
|
||||
count == 0 ? nil : count == cask_tokens.length
|
||||
count.zero? ? nil : count == cask_tokens.length
|
||||
end
|
||||
|
||||
def self.warn_unavailable_with_suggestion(cask_token, e)
|
||||
|
||||
@ -62,7 +62,7 @@ class Hbc::CLI::InternalAuditModifiedCasks < Hbc::CLI::InternalUseBase
|
||||
end
|
||||
|
||||
def git_root
|
||||
@git_root ||= git(*%w[rev-parse --show-toplevel])
|
||||
@git_root ||= git("rev-parse", "--show-toplevel")
|
||||
end
|
||||
|
||||
def modified_cask_files
|
||||
@ -83,8 +83,8 @@ class Hbc::CLI::InternalAuditModifiedCasks < Hbc::CLI::InternalUseBase
|
||||
@modified_casks = modified_cask_files.map { |f| Hbc.load(f) }
|
||||
if @modified_casks.any?
|
||||
num_modified = @modified_casks.size
|
||||
ohai "#{num_modified} modified #{pluralize('cask', num_modified)}: " \
|
||||
"#{@modified_casks.join(' ')}"
|
||||
ohai "#{num_modified} modified #{pluralize("cask", num_modified)}: " \
|
||||
"#{@modified_casks.join(" ")}"
|
||||
end
|
||||
@modified_casks
|
||||
end
|
||||
@ -122,7 +122,7 @@ class Hbc::CLI::InternalAuditModifiedCasks < Hbc::CLI::InternalUseBase
|
||||
num_failed = failed_casks.size
|
||||
cask_pluralized = pluralize("cask", num_failed)
|
||||
odie "audit failed for #{num_failed} #{cask_pluralized}: " \
|
||||
"#{failed_casks.join(' ')}"
|
||||
"#{failed_casks.join(" ")}"
|
||||
end
|
||||
|
||||
def pluralize(str, num)
|
||||
|
||||
@ -21,7 +21,7 @@ class Hbc::CLI::InternalDump < Hbc::CLI::InternalUseBase
|
||||
opoo "#{cask_token} was not found or would not load: #{e}"
|
||||
end
|
||||
end
|
||||
count == 0 ? nil : count == cask_tokens.length
|
||||
count.zero? ? nil : count == cask_tokens.length
|
||||
end
|
||||
|
||||
def self.help
|
||||
|
||||
@ -118,7 +118,7 @@ class Hbc::CLI::InternalStanza < Hbc::CLI::InternalUseBase
|
||||
|
||||
count += 1
|
||||
end
|
||||
count == 0 ? nil : count == cask_tokens.length
|
||||
count.zero? ? nil : count == cask_tokens.length
|
||||
end
|
||||
|
||||
def self.help
|
||||
|
||||
@ -48,7 +48,7 @@ class Hbc::CLI::List < Hbc::CLI::Base
|
||||
end
|
||||
end
|
||||
|
||||
count == 0 ? nil : count == cask_tokens.length
|
||||
count.zero? ? nil : count == cask_tokens.length
|
||||
end
|
||||
|
||||
def self.list_artifacts(cask)
|
||||
|
||||
@ -28,8 +28,8 @@ class Hbc::CLI::Uninstall < Hbc::CLI::Base
|
||||
single = versions.count == 1
|
||||
|
||||
puts <<-EOS.undent
|
||||
#{cask_token} #{versions.join(', ')} #{single ? 'is' : 'are'} still installed.
|
||||
Remove #{single ? 'it' : 'them all'} with `brew cask uninstall --force #{cask_token}`.
|
||||
#{cask_token} #{versions.join(", ")} #{single ? "is" : "are"} still installed.
|
||||
Remove #{single ? "it" : "them all"} with `brew cask uninstall --force #{cask_token}`.
|
||||
EOS
|
||||
end
|
||||
end
|
||||
|
||||
@ -269,8 +269,16 @@ class Hbc::DSL
|
||||
end
|
||||
|
||||
def method_missing(method, *)
|
||||
Hbc::Utils.method_missing_message(method, token)
|
||||
nil
|
||||
if method
|
||||
Hbc::Utils.method_missing_message(method, token)
|
||||
nil
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to_missing?(*)
|
||||
true
|
||||
end
|
||||
|
||||
def appdir
|
||||
|
||||
@ -13,9 +13,17 @@ class Hbc::DSL::Base
|
||||
end
|
||||
|
||||
def method_missing(method, *)
|
||||
underscored_class = self.class.name.gsub(%r{([[:lower:]])([[:upper:]][[:lower:]])}, '\1_\2').downcase
|
||||
section = underscored_class.downcase.split("::").last
|
||||
Hbc::Utils.method_missing_message(method, @cask.to_s, section)
|
||||
nil
|
||||
if method
|
||||
underscored_class = self.class.name.gsub(%r{([[:lower:]])([[:upper:]][[:lower:]])}, '\1_\2').downcase
|
||||
section = underscored_class.downcase.split("::").last
|
||||
Hbc::Utils.method_missing_message(method, @cask.to_s, section)
|
||||
nil
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to_missing?(*)
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
@ -25,13 +25,21 @@ class Hbc::DSL::StanzaProxy
|
||||
coder["resolved"] = @resolver.call
|
||||
end
|
||||
|
||||
def respond_to?(symbol, include_private = false)
|
||||
return true if %i{encode_with proxy? to_s type}.include?(symbol)
|
||||
return false if symbol == :to_ary
|
||||
@resolver.call.respond_to?(symbol, include_private)
|
||||
def method_missing(method, *args)
|
||||
if method != :to_ary
|
||||
@resolver.call.send(method, *args)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def method_missing(symbol, *args)
|
||||
@resolver.call.send(symbol, *args)
|
||||
def respond_to?(method, include_private = false)
|
||||
return true if %i{encode_with proxy? to_s type}.include?(method)
|
||||
return false if method == :to_ary
|
||||
@resolver.call.respond_to?(method, include_private)
|
||||
end
|
||||
|
||||
def respond_to_missing?(*)
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
@ -139,15 +139,15 @@ class Hbc::Installer
|
||||
# dependencies should also apply for "brew cask stage"
|
||||
# override dependencies with --force or perhaps --force-deps
|
||||
def satisfy_dependencies
|
||||
if @cask.depends_on
|
||||
ohai "Satisfying dependencies"
|
||||
macos_dependencies
|
||||
arch_dependencies
|
||||
x11_dependencies
|
||||
formula_dependencies
|
||||
cask_dependencies unless skip_cask_deps
|
||||
puts "complete"
|
||||
end
|
||||
return unless @cask.depends_on
|
||||
|
||||
ohai "Satisfying dependencies"
|
||||
macos_dependencies
|
||||
arch_dependencies
|
||||
x11_dependencies
|
||||
formula_dependencies
|
||||
cask_dependencies unless skip_cask_deps
|
||||
puts "complete"
|
||||
end
|
||||
|
||||
def macos_dependencies
|
||||
@ -159,7 +159,7 @@ class Hbc::Installer
|
||||
end
|
||||
elsif @cask.depends_on.macos.length > 1
|
||||
unless @cask.depends_on.macos.include?(Gem::Version.new(MacOS.version.to_s))
|
||||
raise Hbc::CaskError, "Cask #{@cask} depends on macOS release being one of [#{@cask.depends_on.macos.map(&:to_s).join(', ')}], but you are running release #{MacOS.version}."
|
||||
raise Hbc::CaskError, "Cask #{@cask} depends on macOS release being one of [#{@cask.depends_on.macos.map(&:to_s).join(", ")}], but you are running release #{MacOS.version}."
|
||||
end
|
||||
else
|
||||
unless MacOS.version == @cask.depends_on.macos.first
|
||||
@ -175,7 +175,7 @@ class Hbc::Installer
|
||||
arch[:type] == @current_arch[:type] &&
|
||||
Array(arch[:bits]).include?(@current_arch[:bits])
|
||||
}
|
||||
raise Hbc::CaskError, "Cask #{@cask} depends on hardware architecture being one of [#{@cask.depends_on.arch.map(&:to_s).join(', ')}], but you are running #{@current_arch}"
|
||||
raise Hbc::CaskError, "Cask #{@cask} depends on hardware architecture being one of [#{@cask.depends_on.arch.map(&:to_s).join(", ")}], but you are running #{@current_arch}"
|
||||
end
|
||||
|
||||
def x11_dependencies
|
||||
@ -203,7 +203,7 @@ class Hbc::Installer
|
||||
|
||||
def cask_dependencies
|
||||
return unless @cask.depends_on.cask && !@cask.depends_on.cask.empty?
|
||||
ohai "Installing Cask dependencies: #{@cask.depends_on.cask.join(', ')}"
|
||||
ohai "Installing Cask dependencies: #{@cask.depends_on.cask.join(", ")}"
|
||||
deps = Hbc::CaskDependencies.new(@cask)
|
||||
deps.sorted.each do |dep_token|
|
||||
puts "#{dep_token} ..."
|
||||
|
||||
@ -11,7 +11,7 @@ class Hbc::Source::TappedQualified < Hbc::Source::Tapped
|
||||
qualified_token = Hbc::QualifiedToken.parse(query)
|
||||
return if qualified_token.nil?
|
||||
|
||||
user, repo, token = qualified_token
|
||||
user, repo = qualified_token[0..1]
|
||||
Tap.fetch(user, repo)
|
||||
end
|
||||
|
||||
|
||||
@ -123,7 +123,7 @@ class Hbc::SystemCommand::Result
|
||||
end
|
||||
|
||||
def success?
|
||||
@exit_status == 0
|
||||
@exit_status.zero?
|
||||
end
|
||||
|
||||
def merged_output
|
||||
|
||||
@ -36,7 +36,7 @@ class Hbc::UrlChecker
|
||||
def _check_response_status
|
||||
ok = OK_RESPONSES[cask.url.scheme]
|
||||
return if ok.include?(@response_status)
|
||||
add_error "unexpected http response, expecting #{ok.map(&:utf8_inspect).join(' or ')}, got #{@response_status.utf8_inspect}"
|
||||
add_error "unexpected http response, expecting #{ok.map(&:utf8_inspect).join(" or ")}, got #{@response_status.utf8_inspect}"
|
||||
end
|
||||
|
||||
def _get_data_from_request
|
||||
|
||||
@ -32,14 +32,15 @@ end
|
||||
# global methods
|
||||
|
||||
def odebug(title, *sput)
|
||||
if Hbc.respond_to?(:debug) && Hbc.debug
|
||||
width = Tty.width * 4 - 6
|
||||
if $stdout.tty? && title.to_s.length > width
|
||||
title = title.to_s[0, width - 3] + "..."
|
||||
end
|
||||
puts "#{Tty.magenta}==>#{Tty.reset} #{Tty.white}#{title}#{Tty.reset}"
|
||||
puts sput unless sput.empty?
|
||||
return unless Hbc.respond_to?(:debug)
|
||||
return unless Hbc.debug
|
||||
|
||||
width = Tty.width * 4 - 6
|
||||
if $stdout.tty? && title.to_s.length > width
|
||||
title = title.to_s[0, width - 3] + "..."
|
||||
end
|
||||
puts "#{Tty.magenta}==>#{Tty.reset} #{Tty.white}#{title}#{Tty.reset}"
|
||||
puts sput unless sput.empty?
|
||||
end
|
||||
|
||||
module Hbc::Utils
|
||||
|
||||
@ -12,7 +12,7 @@ describe Hbc::CLI::Cleanup do
|
||||
|
||||
describe "cleanup" do
|
||||
it "removes cached downloads of given casks" do
|
||||
cleaned_up_cached_download = 'caffeine'
|
||||
cleaned_up_cached_download = "caffeine"
|
||||
|
||||
cached_downloads = [
|
||||
cache_location.join("#{cleaned_up_cached_download}--latest.zip"),
|
||||
|
||||
@ -9,7 +9,7 @@ end
|
||||
project_root = Pathname.new(File.expand_path("../..", __FILE__))
|
||||
|
||||
# add Homebrew to load path
|
||||
$LOAD_PATH.unshift(File.expand_path("#{ENV['HOMEBREW_REPOSITORY']}/Library/Homebrew"))
|
||||
$LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_REPOSITORY"]}/Library/Homebrew"))
|
||||
|
||||
require "global"
|
||||
|
||||
|
||||
@ -60,7 +60,6 @@ describe Hbc::Artifact::App do
|
||||
File.exist?(cask.staged_path.join("Caffeine Deluxe.app")).must_equal true
|
||||
end
|
||||
|
||||
|
||||
describe "avoids clobbering an existing app" do
|
||||
let(:cask) { local_two_apps_caffeine }
|
||||
|
||||
@ -70,8 +69,8 @@ describe Hbc::Artifact::App do
|
||||
TestHelper.must_output(self, lambda {
|
||||
Hbc::Artifact::App.new(cask).install_phase
|
||||
}, <<-EOS.undent.chomp)
|
||||
==> It seems there is already an App at '#{Hbc.appdir.join('Caffeine Mini.app')}'; not moving.
|
||||
==> Moving App 'Caffeine Pro.app' to '#{Hbc.appdir.join('Caffeine Pro.app')}'
|
||||
==> It seems there is already an App at '#{Hbc.appdir.join("Caffeine Mini.app")}'; not moving.
|
||||
==> Moving App 'Caffeine Pro.app' to '#{Hbc.appdir.join("Caffeine Pro.app")}'
|
||||
EOS
|
||||
|
||||
source_path = cask.staged_path.join("Caffeine Mini.app")
|
||||
@ -85,8 +84,8 @@ describe Hbc::Artifact::App do
|
||||
TestHelper.must_output(self, lambda {
|
||||
Hbc::Artifact::App.new(cask).install_phase
|
||||
}, <<-EOS.undent.chomp)
|
||||
==> Moving App 'Caffeine Mini.app' to '#{Hbc.appdir.join('Caffeine Mini.app')}'
|
||||
==> It seems there is already an App at '#{Hbc.appdir.join('Caffeine Pro.app')}'; not moving.
|
||||
==> Moving App 'Caffeine Mini.app' to '#{Hbc.appdir.join("Caffeine Mini.app")}'
|
||||
==> It seems there is already an App at '#{Hbc.appdir.join("Caffeine Pro.app")}'; not moving.
|
||||
EOS
|
||||
|
||||
source_path = cask.staged_path.join("Caffeine Pro.app")
|
||||
|
||||
@ -79,9 +79,9 @@ describe Hbc::CLI::List do
|
||||
Hbc::CLI::List.run("local-transmission", "local-caffeine")
|
||||
}.must_output <<-EOS.undent
|
||||
==> Apps
|
||||
#{Hbc.appdir.join('Transmission.app')} (#{Hbc.appdir.join('Transmission.app').abv})
|
||||
#{Hbc.appdir.join("Transmission.app")} (#{Hbc.appdir.join("Transmission.app").abv})
|
||||
==> Apps
|
||||
Missing App: #{Hbc.appdir.join('Caffeine.app')}
|
||||
Missing App: #{Hbc.appdir.join("Caffeine.app")}
|
||||
EOS
|
||||
end
|
||||
end
|
||||
|
||||
@ -10,7 +10,7 @@ project_root = Pathname.new(File.expand_path("../..", __FILE__))
|
||||
tap_root = Pathname.new(ENV["HOMEBREW_LIBRARY"]).join("Taps", "caskroom", "homebrew-cask")
|
||||
|
||||
# add Homebrew to load path
|
||||
$LOAD_PATH.unshift(File.expand_path("#{ENV['HOMEBREW_REPOSITORY']}/Library/Homebrew"))
|
||||
$LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_REPOSITORY"]}/Library/Homebrew"))
|
||||
|
||||
require "global"
|
||||
|
||||
|
||||
@ -69,27 +69,34 @@ class Caveats
|
||||
end
|
||||
|
||||
def bash_completion_caveats
|
||||
if keg && keg.completion_installed?(:bash) then <<-EOS.undent
|
||||
return unless keg
|
||||
return unless keg.completion_installed?(:bash)
|
||||
|
||||
<<-EOS.undent
|
||||
Bash completion has been installed to:
|
||||
#{HOMEBREW_PREFIX}/etc/bash_completion.d
|
||||
EOS
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
def zsh_completion_caveats
|
||||
if keg && keg.completion_installed?(:zsh) then <<-EOS.undent
|
||||
return unless keg
|
||||
return unless keg.completion_installed?(:zsh)
|
||||
|
||||
<<-EOS.undent
|
||||
zsh completion has been installed to:
|
||||
#{HOMEBREW_PREFIX}/share/zsh/site-functions
|
||||
EOS
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
def fish_completion_caveats
|
||||
if keg && keg.completion_installed?(:fish) && which("fish") then <<-EOS.undent
|
||||
return unless keg
|
||||
return unless keg.completion_installed?(:fish)
|
||||
return unless which("fish")
|
||||
|
||||
<<-EOS.undent
|
||||
fish completion has been installed to:
|
||||
#{HOMEBREW_PREFIX}/share/fish/vendor_completions.d
|
||||
EOS
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
def python_caveats
|
||||
@ -140,22 +147,24 @@ class Caveats
|
||||
end
|
||||
|
||||
def app_caveats
|
||||
if keg && keg.app_installed?
|
||||
<<-EOS.undent
|
||||
.app bundles were installed.
|
||||
Run `brew linkapps #{keg.name}` to symlink these to /Applications.
|
||||
EOS
|
||||
end
|
||||
return unless keg
|
||||
return unless keg.app_installed?
|
||||
|
||||
<<-EOS.undent
|
||||
.app bundles were installed.
|
||||
Run `brew linkapps #{keg.name}` to symlink these to /Applications.
|
||||
EOS
|
||||
end
|
||||
|
||||
def elisp_caveats
|
||||
return if f.keg_only?
|
||||
if keg && keg.elisp_installed?
|
||||
<<-EOS.undent
|
||||
Emacs Lisp files have been installed to:
|
||||
#{HOMEBREW_PREFIX}/share/emacs/site-lisp/#{f.name}
|
||||
EOS
|
||||
end
|
||||
return unless keg
|
||||
return unless keg.elisp_installed?
|
||||
|
||||
<<-EOS.undent
|
||||
Emacs Lisp files have been installed to:
|
||||
#{HOMEBREW_PREFIX}/share/emacs/site-lisp/#{f.name}
|
||||
EOS
|
||||
end
|
||||
|
||||
def plist_caveats
|
||||
|
||||
@ -87,9 +87,9 @@ class Cleaner
|
||||
|
||||
Find.prune if @f.skip_clean? path
|
||||
|
||||
if path.symlink? || path.directory?
|
||||
next
|
||||
elsif path.extname == ".la"
|
||||
next if path.symlink? || path.directory?
|
||||
|
||||
if path.extname == ".la"
|
||||
path.unlink
|
||||
elsif path.basename.to_s == "perllocal.pod"
|
||||
# Both this file & the .packlist one below are completely unnecessary
|
||||
|
||||
@ -12,7 +12,7 @@ module Homebrew
|
||||
cleanup_logs
|
||||
unless ARGV.dry_run?
|
||||
cleanup_lockfiles
|
||||
rm_DS_Store
|
||||
rm_ds_store
|
||||
end
|
||||
end
|
||||
|
||||
@ -66,7 +66,7 @@ module Homebrew
|
||||
next unless path.file?
|
||||
file = path
|
||||
|
||||
if Pathname::BOTTLE_EXTNAME_RX === file.to_s
|
||||
if file.to_s =~ Pathname::BOTTLE_EXTNAME_RX
|
||||
version = begin
|
||||
Utils::Bottles.resolve_version(file)
|
||||
rescue
|
||||
@ -86,7 +86,7 @@ module Homebrew
|
||||
next
|
||||
end
|
||||
|
||||
file_is_stale = if PkgVersion === version
|
||||
file_is_stale = if version.is_a?(PkgVersion)
|
||||
f.pkg_version > version
|
||||
else
|
||||
f.version > version
|
||||
@ -119,7 +119,7 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def self.rm_DS_Store
|
||||
def self.rm_ds_store
|
||||
paths = Queue.new
|
||||
%w[Cellar Frameworks Library bin etc include lib opt sbin share var]
|
||||
.map { |p| HOMEBREW_PREFIX/p }.each { |p| paths << p if p.exist? }
|
||||
|
||||
@ -22,13 +22,13 @@ module Homebrew
|
||||
ARGV.resolved_formulae.each { |f| Cleanup.cleanup_formula f }
|
||||
end
|
||||
|
||||
if Cleanup.disk_cleanup_size > 0
|
||||
disk_space = disk_usage_readable(Cleanup.disk_cleanup_size)
|
||||
if ARGV.dry_run?
|
||||
ohai "This operation would free approximately #{disk_space} of disk space."
|
||||
else
|
||||
ohai "This operation has freed approximately #{disk_space} of disk space."
|
||||
end
|
||||
return if Cleanup.disk_cleanup_size.zero?
|
||||
|
||||
disk_space = disk_usage_readable(Cleanup.disk_cleanup_size)
|
||||
if ARGV.dry_run?
|
||||
ohai "This operation would free approximately #{disk_space} of disk space."
|
||||
else
|
||||
ohai "This operation has freed approximately #{disk_space} of disk space."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -31,11 +31,9 @@ module Homebrew
|
||||
def detect_version(path)
|
||||
version = path.version.to_s
|
||||
|
||||
if version.empty?
|
||||
raise "Couldn't determine version, set it with --version=<version>"
|
||||
else
|
||||
version
|
||||
end
|
||||
raise "Couldn't determine version, set it with --version=<version>" if version.empty?
|
||||
|
||||
version
|
||||
end
|
||||
|
||||
def detect_name(path, version)
|
||||
|
||||
@ -54,11 +54,8 @@ module Homebrew
|
||||
end
|
||||
rescue FormulaUnavailableError
|
||||
# No formula with this name, try a blacklist lookup
|
||||
if (blacklist = blacklisted?(f))
|
||||
puts blacklist
|
||||
else
|
||||
raise
|
||||
end
|
||||
raise unless (blacklist = blacklisted?(f))
|
||||
puts blacklist
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -245,11 +245,11 @@ module Homebrew
|
||||
end
|
||||
|
||||
def check_macports
|
||||
unless MacOS.macports_or_fink.empty?
|
||||
opoo "It appears you have MacPorts or Fink installed."
|
||||
puts "Software installed with other package managers causes known problems for"
|
||||
puts "Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again."
|
||||
end
|
||||
return if MacOS.macports_or_fink.empty?
|
||||
|
||||
opoo "It appears you have MacPorts or Fink installed."
|
||||
puts "Software installed with other package managers causes known problems for"
|
||||
puts "Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again."
|
||||
end
|
||||
|
||||
def check_cellar
|
||||
|
||||
@ -58,10 +58,11 @@ module Homebrew
|
||||
|
||||
def restore_backup(keg, formula)
|
||||
path = backup_path(keg)
|
||||
if path.directory?
|
||||
path.rename keg
|
||||
keg.link unless formula.keg_only?
|
||||
end
|
||||
|
||||
return unless path.directory?
|
||||
|
||||
path.rename keg
|
||||
keg.link unless formula.keg_only?
|
||||
end
|
||||
|
||||
def backup_path(path)
|
||||
|
||||
@ -150,7 +150,7 @@ module Homebrew
|
||||
|
||||
names = remote_tap_formulae["#{user}/#{repo}"]
|
||||
user = user.downcase if user == "Homebrew" # special handling for the Homebrew organization
|
||||
names.select { |name| rx === name }.map { |name| "#{user}/#{repo}/#{name}" }
|
||||
names.select { |name| name =~ rx }.map { |name| "#{user}/#{repo}/#{name}" }
|
||||
rescue GitHub::HTTPNotFoundError
|
||||
opoo "Failed to search tap: #{user}/#{repo}. Please run `brew update`"
|
||||
[]
|
||||
@ -171,10 +171,11 @@ module Homebrew
|
||||
rescue
|
||||
canonical_name = canonical_full_name = name
|
||||
end
|
||||
|
||||
# Ignore aliases from results when the full name was also found
|
||||
if aliases.include?(name) && results.include?(canonical_full_name)
|
||||
next
|
||||
elsif (HOMEBREW_CELLAR/canonical_name).directory?
|
||||
next if aliases.include?(name) && results.include?(canonical_full_name)
|
||||
|
||||
if (HOMEBREW_CELLAR/canonical_name).directory?
|
||||
pretty_installed(name)
|
||||
else
|
||||
name
|
||||
|
||||
@ -45,7 +45,7 @@ module Homebrew
|
||||
|
||||
def check_style_impl(files, output_type, options = {})
|
||||
fix = options[:fix]
|
||||
Homebrew.install_gem_setup_path! "rubocop", "0.41.2"
|
||||
Homebrew.install_gem_setup_path! "rubocop", "0.43.0"
|
||||
|
||||
args = %W[
|
||||
--force-exclusion
|
||||
@ -54,20 +54,22 @@ module Homebrew
|
||||
args << "--auto-correct" if fix
|
||||
args += files
|
||||
|
||||
case output_type
|
||||
when :print
|
||||
args << "--display-cop-names" if ARGV.include? "--display-cop-names"
|
||||
system "rubocop", "--format", "simple", *args
|
||||
!$?.success?
|
||||
when :json
|
||||
json = Utils.popen_read_text("rubocop", "--format", "json", *args)
|
||||
# exit status of 1 just means violations were found; other numbers mean execution errors
|
||||
# exitstatus can also be nil if RuboCop process crashes, e.g. due to
|
||||
# native extension problems
|
||||
raise "Error while running RuboCop" if $?.exitstatus.nil? || $?.exitstatus > 1
|
||||
RubocopResults.new(Utils::JSON.load(json))
|
||||
else
|
||||
raise "Invalid output_type for check_style_impl: #{output_type}"
|
||||
HOMEBREW_LIBRARY.cd do
|
||||
case output_type
|
||||
when :print
|
||||
args << "--display-cop-names" if ARGV.include? "--display-cop-names"
|
||||
system "rubocop", "--format", "simple", *args
|
||||
!$?.success?
|
||||
when :json
|
||||
json = Utils.popen_read_text("rubocop", "--format", "json", *args)
|
||||
# exit status of 1 just means violations were found; other numbers mean execution errors
|
||||
# exitstatus can also be nil if RuboCop process crashes, e.g. due to
|
||||
# native extension problems
|
||||
raise "Error while running RuboCop" if $?.exitstatus.nil? || $?.exitstatus > 1
|
||||
RubocopResults.new(Utils::JSON.load(json))
|
||||
else
|
||||
raise "Invalid output_type for check_style_impl: #{output_type}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ class CxxStdlib
|
||||
if type && ![:libstdcxx, :libcxx].include?(type)
|
||||
raise ArgumentError, "Invalid C++ stdlib type: #{type}"
|
||||
end
|
||||
klass = GNU_GCC_REGEXP === compiler.to_s ? GnuStdlib : AppleStdlib
|
||||
klass = compiler.to_s =~ GNU_GCC_REGEXP ? GnuStdlib : AppleStdlib
|
||||
klass.new(type, compiler)
|
||||
end
|
||||
|
||||
|
||||
@ -118,20 +118,22 @@ module Debrew
|
||||
menu.prompt = "Choose an action: "
|
||||
|
||||
menu.choice(:raise) { original_raise(e) }
|
||||
menu.choice(:ignore) { return :ignore } if Ignorable === e
|
||||
menu.choice(:ignore) { return :ignore } if e.is_a?(Ignorable)
|
||||
menu.choice(:backtrace) { puts e.backtrace }
|
||||
|
||||
menu.choice(:irb) do
|
||||
puts "When you exit this IRB session, execution will continue."
|
||||
set_trace_func proc { |event, _, _, id, binding, klass|
|
||||
if klass == Raise && id == :raise && event == "return"
|
||||
set_trace_func(nil)
|
||||
synchronize { IRB.start_within(binding) }
|
||||
end
|
||||
}
|
||||
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|
|
||||
if klass == Raise && id == :raise && event == "return"
|
||||
set_trace_func(nil)
|
||||
synchronize { IRB.start_within(binding) }
|
||||
end
|
||||
}
|
||||
|
||||
return :ignore
|
||||
end if Ignorable === e
|
||||
return :ignore
|
||||
end
|
||||
end
|
||||
|
||||
menu.choice(:shell) do
|
||||
puts "When you exit this shell, you will return to the menu."
|
||||
|
||||
@ -69,7 +69,7 @@ class Requirements
|
||||
end
|
||||
|
||||
def <<(other)
|
||||
if Comparable === other
|
||||
if other.is_a?(Comparable)
|
||||
@reqs.grep(other.class) do |req|
|
||||
return self if req > other
|
||||
@reqs.delete(req)
|
||||
|
||||
@ -49,7 +49,7 @@ class DependencyCollector
|
||||
end
|
||||
|
||||
def cache_key(spec)
|
||||
if Resource === spec && spec.download_strategy == CurlDownloadStrategy
|
||||
if spec.is_a?(Resource) && spec.download_strategy == CurlDownloadStrategy
|
||||
File.extname(spec.url)
|
||||
else
|
||||
spec
|
||||
@ -57,7 +57,7 @@ class DependencyCollector
|
||||
end
|
||||
|
||||
def build(spec)
|
||||
spec, tags = Hash === spec ? spec.first : spec
|
||||
spec, tags = spec.is_a?(Hash) ? spec.first : spec
|
||||
parse_spec(spec, Array(tags))
|
||||
end
|
||||
|
||||
@ -81,7 +81,7 @@ class DependencyCollector
|
||||
end
|
||||
|
||||
def parse_string_spec(spec, tags)
|
||||
if HOMEBREW_TAP_FORMULA_REGEX === spec
|
||||
if spec =~ HOMEBREW_TAP_FORMULA_REGEX
|
||||
TapDependency.new(spec, tags)
|
||||
elsif tags.empty?
|
||||
Dependency.new(spec, tags)
|
||||
@ -165,11 +165,11 @@ class DependencyCollector
|
||||
|
||||
def parse_url_spec(url, tags)
|
||||
case File.extname(url)
|
||||
when ".xz" then Dependency.new("xz", tags)
|
||||
when ".xz" then Dependency.new("xz", tags)
|
||||
when ".lha", ".lzh" then Dependency.new("lha", tags)
|
||||
when ".lz" then Dependency.new("lzip", tags)
|
||||
when ".rar" then Dependency.new("unrar", tags)
|
||||
when ".7z" then Dependency.new("p7zip", tags)
|
||||
when ".lz" then Dependency.new("lzip", tags)
|
||||
when ".rar" then Dependency.new("unrar", tags)
|
||||
when ".7z" then Dependency.new("p7zip", tags)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -12,9 +12,7 @@ class Descriptions
|
||||
# If the cache file exists, load it into, and return, a hash; otherwise,
|
||||
# return nil.
|
||||
def self.load_cache
|
||||
if CACHE_FILE.exist?
|
||||
@cache = Utils::JSON.load(CACHE_FILE.read)
|
||||
end
|
||||
@cache = Utils::JSON.load(CACHE_FILE.read) if CACHE_FILE.exist?
|
||||
end
|
||||
|
||||
# Write the cache to disk after ensuring the existence of the containing
|
||||
@ -138,6 +136,6 @@ class Descriptions
|
||||
|
||||
def short_name_counts
|
||||
@short_name_counts ||=
|
||||
short_names.values.each_with_object(Hash.new(0)) { |name, counts| counts[name] += 1; counts }
|
||||
short_names.values.each_with_object(Hash.new(0)) { |name, counts| counts[name] += 1 }
|
||||
end
|
||||
end
|
||||
|
||||
@ -83,11 +83,11 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
unless problem_count.zero?
|
||||
problems = "problem" + plural(problem_count)
|
||||
formulae = "formula" + plural(formula_count, "e")
|
||||
ofail "#{problem_count} #{problems} in #{formula_count} #{formulae}"
|
||||
end
|
||||
return if problem_count.zero?
|
||||
|
||||
problems = "problem" + plural(problem_count)
|
||||
formulae = "formula" + plural(formula_count, "e")
|
||||
ofail "#{problem_count} #{problems} in #{formula_count} #{formulae}"
|
||||
end
|
||||
end
|
||||
|
||||
@ -279,9 +279,11 @@ class FormulaAuditor
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if present.include?("head") && present.include?("head block")
|
||||
problem "Should not have both `head` and `head do`"
|
||||
end
|
||||
|
||||
if present.include?("bottle modifier") && present.include?("bottle block")
|
||||
problem "Should not have `bottle :unneeded/:disable` and `bottle do`"
|
||||
end
|
||||
@ -467,7 +469,7 @@ class FormulaAuditor
|
||||
|
||||
# Make sure the formula name plus description is no longer than 80 characters
|
||||
# Note full_name includes the name of the tap, while name does not
|
||||
linelength = formula.name.length + ": ".length + desc.length
|
||||
linelength = "#{formula.name}: #{desc}".length
|
||||
if linelength > 80
|
||||
problem <<-EOS.undent
|
||||
Description is too long. \"name: desc\" should be less than 80 characters.
|
||||
@ -668,24 +670,26 @@ class FormulaAuditor
|
||||
end
|
||||
|
||||
revision_map = attributes_map[:revision]
|
||||
if formula.revision.nonzero?
|
||||
if formula.stable
|
||||
if revision_map[formula.stable.version].empty? # check stable spec
|
||||
problem "'revision #{formula.revision}' should be removed"
|
||||
end
|
||||
else # head/devel-only formula
|
||||
|
||||
return if formula.revision.zero?
|
||||
|
||||
if formula.stable
|
||||
if revision_map[formula.stable.version].empty? # check stable spec
|
||||
problem "'revision #{formula.revision}' should be removed"
|
||||
end
|
||||
else # head/devel-only formula
|
||||
problem "'revision #{formula.revision}' should be removed"
|
||||
end
|
||||
end
|
||||
|
||||
def audit_legacy_patches
|
||||
return unless formula.respond_to?(:patches)
|
||||
legacy_patches = Patch.normalize_legacy_patches(formula.patches).grep(LegacyPatch)
|
||||
unless legacy_patches.empty?
|
||||
problem "Use the patch DSL instead of defining a 'patches' method"
|
||||
legacy_patches.each { |p| audit_patch(p) }
|
||||
end
|
||||
|
||||
return if legacy_patches.empty?
|
||||
|
||||
problem "Use the patch DSL instead of defining a 'patches' method"
|
||||
legacy_patches.each { |p| audit_patch(p) }
|
||||
end
|
||||
|
||||
def audit_patch(patch)
|
||||
@ -961,61 +965,56 @@ class FormulaAuditor
|
||||
problem "Use Language::Node for npm install args"
|
||||
end
|
||||
|
||||
if @strict
|
||||
if line =~ /system ((["'])[^"' ]*(?:\s[^"' ]*)+\2)/
|
||||
bad_system = $1
|
||||
unless %w[| < > & ; *].any? { |c| bad_system.include? c }
|
||||
good_system = bad_system.gsub(" ", "\", \"")
|
||||
problem "Use `system #{good_system}` instead of `system #{bad_system}` "
|
||||
end
|
||||
end
|
||||
return unless @strict
|
||||
|
||||
if line =~ /(require ["']formula["'])/
|
||||
problem "`#{$1}` is now unnecessary"
|
||||
if line =~ /system ((["'])[^"' ]*(?:\s[^"' ]*)+\2)/
|
||||
bad_system = $1
|
||||
unless %w[| < > & ; *].any? { |c| bad_system.include? c }
|
||||
good_system = bad_system.gsub(" ", "\", \"")
|
||||
problem "Use `system #{good_system}` instead of `system #{bad_system}` "
|
||||
end
|
||||
end
|
||||
|
||||
if line =~ %r{#\{share\}/#{Regexp.escape(formula.name)}[/'"]}
|
||||
problem "Use \#{pkgshare} instead of \#{share}/#{formula.name}"
|
||||
end
|
||||
if line =~ /(require ["']formula["'])/
|
||||
problem "`#{$1}` is now unnecessary"
|
||||
end
|
||||
|
||||
if line =~ %r{share(\s*[/+]\s*)(['"])#{Regexp.escape(formula.name)}(?:\2|/)}
|
||||
problem "Use pkgshare instead of (share#{$1}\"#{formula.name}\")"
|
||||
end
|
||||
if line =~ %r{#\{share\}/#{Regexp.escape(formula.name)}[/'"]}
|
||||
problem "Use \#{pkgshare} instead of \#{share}/#{formula.name}"
|
||||
end
|
||||
|
||||
if line =~ %r{share(\s*[/+]\s*)(['"])#{Regexp.escape(formula.name)}(?:\2|/)}
|
||||
problem "Use pkgshare instead of (share#{$1}\"#{formula.name}\")"
|
||||
end
|
||||
end
|
||||
|
||||
def audit_caveats
|
||||
caveats = formula.caveats.to_s
|
||||
|
||||
if caveats.include?("setuid")
|
||||
problem "Don't recommend setuid in the caveats, suggest sudo instead."
|
||||
end
|
||||
return unless formula.caveats.to_s.include?("setuid")
|
||||
problem "Don't recommend setuid in the caveats, suggest sudo instead."
|
||||
end
|
||||
|
||||
def audit_reverse_migration
|
||||
# Only enforce for new formula being re-added to core and official taps
|
||||
return unless @strict
|
||||
return unless formula.tap && formula.tap.official?
|
||||
return unless formula.tap.tap_migrations.key?(formula.name)
|
||||
|
||||
if formula.tap.tap_migrations.key?(formula.name)
|
||||
problem <<-EOS.undent
|
||||
#{formula.name} seems to be listed in tap_migrations.json!
|
||||
Please remove #{formula.name} from present tap & tap_migrations.json
|
||||
before submitting it to Homebrew/homebrew-#{formula.tap.repo}.
|
||||
EOS
|
||||
end
|
||||
problem <<-EOS.undent
|
||||
#{formula.name} seems to be listed in tap_migrations.json!
|
||||
Please remove #{formula.name} from present tap & tap_migrations.json
|
||||
before submitting it to Homebrew/homebrew-#{formula.tap.repo}.
|
||||
EOS
|
||||
end
|
||||
|
||||
def audit_prefix_has_contents
|
||||
return unless formula.prefix.directory?
|
||||
return unless Keg.new(formula.prefix).empty_installation?
|
||||
|
||||
if Keg.new(formula.prefix).empty_installation?
|
||||
problem <<-EOS.undent
|
||||
The installation seems to be empty. Please ensure the prefix
|
||||
is set correctly and expected files are installed.
|
||||
The prefix configure/make argument may be case-sensitive.
|
||||
EOS
|
||||
end
|
||||
problem <<-EOS.undent
|
||||
The installation seems to be empty. Please ensure the prefix
|
||||
is set correctly and expected files are installed.
|
||||
The prefix configure/make argument may be case-sensitive.
|
||||
EOS
|
||||
end
|
||||
|
||||
def audit_conditional_dep(dep, condition, line)
|
||||
@ -1184,9 +1183,7 @@ class ResourceAuditor
|
||||
end
|
||||
end
|
||||
|
||||
using_strategy = DownloadStrategyDetector.detect("", using)
|
||||
|
||||
if url_strategy == using_strategy
|
||||
if url_strategy == DownloadStrategyDetector.detect("", using)
|
||||
problem "Redundant :using value in URL"
|
||||
end
|
||||
end
|
||||
|
||||
@ -51,10 +51,11 @@ module Homebrew
|
||||
end
|
||||
|
||||
@put_filenames ||= []
|
||||
unless @put_filenames.include? filename
|
||||
puts "#{Tty.red}#{filename}#{Tty.reset}"
|
||||
@put_filenames << filename
|
||||
end
|
||||
|
||||
return if @put_filenames.include? filename
|
||||
|
||||
puts "#{Tty.red}#{filename}#{Tty.reset}"
|
||||
@put_filenames << filename
|
||||
end
|
||||
|
||||
result = false
|
||||
@ -107,9 +108,7 @@ module Homebrew
|
||||
absolute_symlinks_start_with_string = []
|
||||
keg.find do |pn|
|
||||
next unless pn.symlink? && (link = pn.readlink).absolute?
|
||||
if link.to_s.start_with?(string)
|
||||
absolute_symlinks_start_with_string << pn
|
||||
end
|
||||
absolute_symlinks_start_with_string << pn if link.to_s.start_with?(string)
|
||||
end
|
||||
|
||||
if ARGV.verbose?
|
||||
@ -137,11 +136,11 @@ module Homebrew
|
||||
tap = f.tap
|
||||
|
||||
unless tap
|
||||
if ARGV.include?("--force-core-tap")
|
||||
tap = CoreTap.instance
|
||||
else
|
||||
unless ARGV.include?("--force-core-tap")
|
||||
return ofail "Formula not from core or any taps: #{f.full_name}"
|
||||
end
|
||||
|
||||
tap = CoreTap.instance
|
||||
end
|
||||
|
||||
if f.bottle_disabled?
|
||||
@ -154,9 +153,7 @@ module Homebrew
|
||||
return ofail "Formula not installed with '--build-bottle': #{f.full_name}"
|
||||
end
|
||||
|
||||
unless f.stable
|
||||
return ofail "Formula has no stable version: #{f.full_name}"
|
||||
end
|
||||
return ofail "Formula has no stable version: #{f.full_name}" unless f.stable
|
||||
|
||||
if ARGV.include?("--no-rebuild") || !f.tap
|
||||
rebuild = 0
|
||||
@ -323,34 +320,33 @@ module Homebrew
|
||||
puts "./#{filename}"
|
||||
puts output
|
||||
|
||||
if ARGV.include? "--json"
|
||||
json = {
|
||||
f.full_name => {
|
||||
"formula" => {
|
||||
"pkg_version" => f.pkg_version.to_s,
|
||||
"path" => f.path.to_s.strip_prefix("#{HOMEBREW_REPOSITORY}/"),
|
||||
},
|
||||
"bottle" => {
|
||||
"root_url" => bottle.root_url,
|
||||
"prefix" => bottle.prefix,
|
||||
"cellar" => bottle.cellar.to_s,
|
||||
"rebuild" => bottle.rebuild,
|
||||
"tags" => {
|
||||
Utils::Bottles.tag.to_s => {
|
||||
"filename" => filename.to_s,
|
||||
"sha256" => sha256,
|
||||
},
|
||||
return unless ARGV.include? "--json"
|
||||
json = {
|
||||
f.full_name => {
|
||||
"formula" => {
|
||||
"pkg_version" => f.pkg_version.to_s,
|
||||
"path" => f.path.to_s.strip_prefix("#{HOMEBREW_REPOSITORY}/"),
|
||||
},
|
||||
"bottle" => {
|
||||
"root_url" => bottle.root_url,
|
||||
"prefix" => bottle.prefix,
|
||||
"cellar" => bottle.cellar.to_s,
|
||||
"rebuild" => bottle.rebuild,
|
||||
"tags" => {
|
||||
Utils::Bottles.tag.to_s => {
|
||||
"filename" => filename.to_s,
|
||||
"sha256" => sha256,
|
||||
},
|
||||
},
|
||||
"bintray" => {
|
||||
"package" => Utils::Bottles::Bintray.package(f.name),
|
||||
"repository" => Utils::Bottles::Bintray.repository(tap),
|
||||
},
|
||||
},
|
||||
}
|
||||
File.open("#{filename.prefix}.bottle.json", "w") do |file|
|
||||
file.write Utils::JSON.dump json
|
||||
end
|
||||
"bintray" => {
|
||||
"package" => Utils::Bottles::Bintray.package(f.name),
|
||||
"repository" => Utils::Bottles::Bintray.repository(tap),
|
||||
},
|
||||
},
|
||||
}
|
||||
File.open("#{filename.prefix}.bottle.json", "w") do |file|
|
||||
file.write Utils::JSON.dump json
|
||||
end
|
||||
end
|
||||
|
||||
@ -436,7 +432,7 @@ module Homebrew
|
||||
puts output
|
||||
update_or_add = "add"
|
||||
if s.include? "stable do"
|
||||
indent = s.slice(/^ +stable do/).length - "stable do".length
|
||||
indent = s.slice(/^( +)stable do/, 1).length
|
||||
string = s.sub!(/^ {#{indent}}stable do(.|\n)+?^ {#{indent}}end\n/m, '\0' + output + "\n")
|
||||
else
|
||||
string = s.sub!(
|
||||
|
||||
@ -33,9 +33,9 @@ module Homebrew
|
||||
# Don't use ARGV.formulae as that will throw if the file doesn't parse
|
||||
paths = ARGV.named.map do |name|
|
||||
path = Formulary.path(name)
|
||||
unless path.file? || ARGV.force?
|
||||
raise FormulaUnavailableError, name
|
||||
end
|
||||
|
||||
raise FormulaUnavailableError, name unless path.file? || ARGV.force?
|
||||
|
||||
path
|
||||
end
|
||||
exec_editor(*paths)
|
||||
|
||||
@ -4,9 +4,7 @@
|
||||
|
||||
module Homebrew
|
||||
def mirror
|
||||
if ARGV.named.empty?
|
||||
odie "This command requires at least formula argument!"
|
||||
end
|
||||
odie "This command requires at least formula argument!" if ARGV.named.empty?
|
||||
|
||||
bintray_user = ENV["BINTRAY_USER"]
|
||||
bintray_key = ENV["BINTRAY_KEY"]
|
||||
|
||||
@ -41,12 +41,12 @@ require "pkg_version"
|
||||
|
||||
module Homebrew
|
||||
def pull
|
||||
if ARGV[0] == "--rebase"
|
||||
odie "You meant `git pull --rebase`."
|
||||
end
|
||||
odie "You meant `git pull --rebase`." if ARGV[0] == "--rebase"
|
||||
|
||||
if ARGV.named.empty?
|
||||
odie "This command requires at least one argument containing a URL or pull request number"
|
||||
end
|
||||
|
||||
do_bump = ARGV.include?("--bump") && !ARGV.include?("--clean")
|
||||
|
||||
# Formulae with affected bottles that were published
|
||||
@ -429,9 +429,9 @@ module Homebrew
|
||||
# Returns nil if formula is absent or if there was an error reading it
|
||||
def self.lookup(name)
|
||||
json = Utils.popen_read(HOMEBREW_BREW_FILE, "info", "--json=v1", name)
|
||||
unless $?.success?
|
||||
return nil
|
||||
end
|
||||
|
||||
return nil unless $?.success?
|
||||
|
||||
Homebrew.force_utf8!(json)
|
||||
FormulaInfoFromJson.new(Utils::JSON.load(json)[0])
|
||||
end
|
||||
|
||||
@ -185,8 +185,8 @@ module Homebrew
|
||||
|
||||
def puts_result
|
||||
if ENV["TRAVIS"]
|
||||
travis_start_time = @start_time.to_i*1000000000
|
||||
travis_end_time = @end_time.to_i*1000000000
|
||||
travis_start_time = @start_time.to_i * 1_000_000_000
|
||||
travis_end_time = @end_time.to_i * 1_000_000_000
|
||||
travis_duration = travis_end_time - travis_start_time
|
||||
puts "#{Tty.white}==>#{Tty.green} PASSED#{Tty.reset}" if passed?
|
||||
puts "travis_time:end:#{@travis_timer_id},start=#{travis_start_time},finish=#{travis_end_time},duration=#{travis_duration}"
|
||||
@ -563,11 +563,10 @@ module Homebrew
|
||||
|
||||
(installed & dependencies).each do |installed_dependency|
|
||||
installed_dependency_formula = Formulary.factory(installed_dependency)
|
||||
if installed_dependency_formula.installed? &&
|
||||
!installed_dependency_formula.keg_only? &&
|
||||
!installed_dependency_formula.linked_keg.exist?
|
||||
test "brew", "link", installed_dependency
|
||||
end
|
||||
next unless installed_dependency_formula.installed?
|
||||
next if installed_dependency_formula.keg_only?
|
||||
next if installed_dependency_formula.linked_keg.exist?
|
||||
test "brew", "link", installed_dependency
|
||||
end
|
||||
|
||||
dependencies -= installed
|
||||
@ -725,9 +724,7 @@ module Homebrew
|
||||
coverage_args = []
|
||||
if ARGV.include?("--coverage")
|
||||
if ENV["JENKINS_HOME"]
|
||||
if OS.mac? && MacOS.version == :sierra
|
||||
coverage_args << "--coverage"
|
||||
end
|
||||
coverage_args << "--coverage" if OS.mac? && MacOS.version == :sierra
|
||||
else
|
||||
coverage_args << "--coverage"
|
||||
end
|
||||
@ -742,9 +739,7 @@ module Homebrew
|
||||
test "brew", "cask-tests", *coverage_args
|
||||
end
|
||||
elsif @tap
|
||||
if @tap.name == "homebrew/core"
|
||||
test "brew", "style", @tap.name
|
||||
end
|
||||
test "brew", "style", @tap.name if @tap.name == "homebrew/core"
|
||||
test "brew", "readall", "--aliases", @tap.name
|
||||
end
|
||||
end
|
||||
@ -1055,9 +1050,7 @@ module Homebrew
|
||||
ARGV << "--junit" << "--local" << "--test-default-formula"
|
||||
end
|
||||
|
||||
if ARGV.include? "--ci-master"
|
||||
ARGV << "--fast"
|
||||
end
|
||||
ARGV << "--fast" if ARGV.include?("--ci-master")
|
||||
|
||||
if ARGV.include? "--local"
|
||||
ENV["HOMEBREW_CACHE"] = "#{ENV["HOME"]}/Library/Caches/Homebrew"
|
||||
@ -1081,9 +1074,7 @@ module Homebrew
|
||||
safe_system "brew", "tap", tap.name, "--full"
|
||||
end
|
||||
|
||||
if ARGV.include? "--ci-upload"
|
||||
return test_ci_upload(tap)
|
||||
end
|
||||
return test_ci_upload(tap) if ARGV.include?("--ci-upload")
|
||||
|
||||
tests = []
|
||||
any_errors = false
|
||||
|
||||
@ -39,15 +39,11 @@ module Homebrew
|
||||
vols = get_mounts path
|
||||
|
||||
# no volume found
|
||||
if vols.empty?
|
||||
return -1
|
||||
end
|
||||
return -1 if vols.empty?
|
||||
|
||||
vol_index = @volumes.index(vols[0])
|
||||
# volume not found in volume list
|
||||
if vol_index.nil?
|
||||
return -1
|
||||
end
|
||||
return -1 if vol_index.nil?
|
||||
vol_index
|
||||
end
|
||||
|
||||
@ -82,8 +78,8 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def inject_file_list(list, str)
|
||||
list.inject(str) { |s, f| s << " #{f}\n" }
|
||||
def inject_file_list(list, string)
|
||||
list.inject(string) { |a, e| a << " #{e}\n" }
|
||||
end
|
||||
############# END HELPERS
|
||||
|
||||
@ -599,7 +595,7 @@ module Homebrew
|
||||
EOS
|
||||
end
|
||||
|
||||
def check_DYLD_vars
|
||||
def check_dyld_vars
|
||||
dyld_vars = ENV.keys.grep(/^DYLD_/)
|
||||
return if dyld_vars.empty?
|
||||
|
||||
@ -758,7 +754,7 @@ module Homebrew
|
||||
cd #{HOMEBREW_REPOSITORY}
|
||||
git remote add origin https://github.com/Homebrew/brew.git
|
||||
EOS
|
||||
elsif origin !~ /Homebrew\/brew(\.git)?$/
|
||||
elsif origin !~ %r{Homebrew/brew(\.git)?$}
|
||||
<<-EOS.undent
|
||||
Suspicious git origin remote found.
|
||||
|
||||
|
||||
@ -663,19 +663,19 @@ class GitDownloadStrategy < VCSDownloadStrategy
|
||||
@shallow && support_depth?
|
||||
end
|
||||
|
||||
def is_shallow_clone?
|
||||
def shallow_dir?
|
||||
git_dir.join("shallow").exist?
|
||||
end
|
||||
|
||||
def support_depth?
|
||||
@ref_type != :revision && SHALLOW_CLONE_WHITELIST.any? { |rx| rx === @url }
|
||||
@ref_type != :revision && SHALLOW_CLONE_WHITELIST.any? { |regex| @url =~ regex }
|
||||
end
|
||||
|
||||
def git_dir
|
||||
cached_location.join(".git")
|
||||
end
|
||||
|
||||
def has_ref?
|
||||
def ref?
|
||||
quiet_system "git", "--git-dir", git_dir, "rev-parse", "-q", "--verify", "#{@ref}^{commit}"
|
||||
end
|
||||
|
||||
@ -696,7 +696,8 @@ class GitDownloadStrategy < VCSDownloadStrategy
|
||||
args << "--depth" << "1" if shallow_clone?
|
||||
|
||||
case @ref_type
|
||||
when :branch, :tag then args << "--branch" << @ref
|
||||
when :branch, :tag
|
||||
args << "--branch" << @ref
|
||||
end
|
||||
|
||||
args << @url << cached_location
|
||||
@ -716,8 +717,8 @@ class GitDownloadStrategy < VCSDownloadStrategy
|
||||
end
|
||||
|
||||
def update_repo
|
||||
if @ref_type == :branch || !has_ref?
|
||||
if !shallow_clone? && is_shallow_clone?
|
||||
if @ref_type == :branch || !ref?
|
||||
if !shallow_clone? && shallow_dir?
|
||||
quiet_safe_system "git", "fetch", "origin", "--unshallow"
|
||||
else
|
||||
quiet_safe_system "git", "fetch", "origin"
|
||||
@ -741,9 +742,11 @@ class GitDownloadStrategy < VCSDownloadStrategy
|
||||
|
||||
def reset_args
|
||||
ref = case @ref_type
|
||||
when :branch then "origin/#{@ref}"
|
||||
when :revision, :tag then @ref
|
||||
end
|
||||
when :branch
|
||||
"origin/#{@ref}"
|
||||
when :revision, :tag
|
||||
@ref
|
||||
end
|
||||
|
||||
%W[reset --hard #{ref}]
|
||||
end
|
||||
@ -1021,9 +1024,9 @@ class DownloadStrategyDetector
|
||||
def self.detect(url, strategy = nil)
|
||||
if strategy.nil?
|
||||
detect_from_url(url)
|
||||
elsif Class === strategy && strategy < AbstractDownloadStrategy
|
||||
elsif strategy.is_a?(Class) && strategy < AbstractDownloadStrategy
|
||||
strategy
|
||||
elsif Symbol === strategy
|
||||
elsif strategy.is_a?(Symbol)
|
||||
detect_from_symbol(strategy)
|
||||
else
|
||||
raise TypeError,
|
||||
|
||||
@ -216,7 +216,7 @@ module HomebrewArgvExtension
|
||||
end
|
||||
|
||||
def build_all_from_source?
|
||||
!!ENV["HOMEBREW_BUILD_FROM_SOURCE"]
|
||||
!ENV["HOMEBREW_BUILD_FROM_SOURCE"].nil?
|
||||
end
|
||||
|
||||
# Whether a given formula should be built from source during the current
|
||||
|
||||
@ -192,15 +192,11 @@ module Stdenv
|
||||
end
|
||||
|
||||
def libcxx
|
||||
if compiler == :clang
|
||||
append "CXX", "-stdlib=libc++"
|
||||
end
|
||||
append "CXX", "-stdlib=libc++" if compiler == :clang
|
||||
end
|
||||
|
||||
def libstdcxx
|
||||
if compiler == :clang
|
||||
append "CXX", "-stdlib=libstdc++"
|
||||
end
|
||||
append "CXX", "-stdlib=libstdc++" if compiler == :clang
|
||||
end
|
||||
|
||||
# @private
|
||||
|
||||
@ -64,9 +64,7 @@ module Superenv
|
||||
self["HOMEBREW_INCLUDE_PATHS"] = determine_include_paths
|
||||
self["HOMEBREW_LIBRARY_PATHS"] = determine_library_paths
|
||||
self["HOMEBREW_DEPENDENCIES"] = determine_dependencies
|
||||
unless formula.nil?
|
||||
self["HOMEBREW_FORMULA_PREFIX"] = formula.prefix
|
||||
end
|
||||
self["HOMEBREW_FORMULA_PREFIX"] = formula.prefix unless formula.nil?
|
||||
|
||||
# The HOMEBREW_CCCFG ENV variable is used by the ENV/cc tool to control
|
||||
# compiler flag stripping. It consists of a string of characters which act
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "blacklist"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/blacklist"
|
||||
end
|
||||
require "extend/os/mac/blacklist" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "utils/bottles"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/utils/bottles"
|
||||
end
|
||||
require "extend/os/mac/utils/bottles" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "cleaner"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/cleaner"
|
||||
end
|
||||
require "extend/os/mac/cleaner" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "dependency_collector"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/dependency_collector"
|
||||
end
|
||||
require "extend/os/mac/dependency_collector" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "development_tools"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/development_tools"
|
||||
end
|
||||
require "extend/os/mac/development_tools" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "diagnostic"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/diagnostic"
|
||||
end
|
||||
require "extend/os/mac/diagnostic" if OS.mac?
|
||||
|
||||
@ -1,6 +1,3 @@
|
||||
require "os"
|
||||
require "emoji"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/emoji"
|
||||
end
|
||||
require "extend/os/mac/emoji" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "extend/ENV/shared"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/extend/ENV/shared"
|
||||
end
|
||||
require "extend/os/mac/extend/ENV/shared" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "extend/ENV/std"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/extend/ENV/std"
|
||||
end
|
||||
require "extend/os/mac/extend/ENV/std" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "extend/ENV/super"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/extend/ENV/super"
|
||||
end
|
||||
require "extend/os/mac/extend/ENV/super" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "formula_cellar_checks"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/formula_cellar_checks"
|
||||
end
|
||||
require "extend/os/mac/formula_cellar_checks" if OS.mac?
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "keg_relocate"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/keg_relocate"
|
||||
end
|
||||
require "extend/os/mac/keg_relocate" if OS.mac?
|
||||
|
||||
@ -2,13 +2,8 @@ module SharedEnvExtension
|
||||
def no_weak_imports_support?
|
||||
return false unless compiler == :clang
|
||||
|
||||
if MacOS::Xcode.version && MacOS::Xcode.version < "8.0"
|
||||
return false
|
||||
end
|
||||
|
||||
if MacOS::CLT.version && MacOS::CLT.version < "8.0"
|
||||
return false
|
||||
end
|
||||
return false if MacOS::Xcode.version && MacOS::Xcode.version < "8.0"
|
||||
return false if MacOS::CLT.version && MacOS::CLT.version < "8.0"
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
@ -1,5 +1,2 @@
|
||||
require "system_config"
|
||||
|
||||
if OS.mac?
|
||||
require "extend/os/mac/system_config"
|
||||
end
|
||||
require "extend/os/mac/system_config" if OS.mac?
|
||||
|
||||
@ -71,13 +71,13 @@ class Pathname
|
||||
when Array
|
||||
if src.empty?
|
||||
opoo "tried to install empty array to #{self}"
|
||||
return
|
||||
break
|
||||
end
|
||||
src.each { |s| install_p(s, File.basename(s)) }
|
||||
when Hash
|
||||
if src.empty?
|
||||
opoo "tried to install empty hash to #{self}"
|
||||
return
|
||||
break
|
||||
end
|
||||
src.each { |s, new_basename| install_p(s, new_basename) }
|
||||
else
|
||||
|
||||
@ -395,9 +395,7 @@ class Formula
|
||||
def oldname
|
||||
@oldname ||= if tap
|
||||
formula_renames = tap.formula_renames
|
||||
if formula_renames.value?(name)
|
||||
formula_renames.to_a.rassoc(name).first
|
||||
end
|
||||
formula_renames.to_a.rassoc(name).first if formula_renames.value?(name)
|
||||
end
|
||||
end
|
||||
|
||||
@ -1052,7 +1050,7 @@ class Formula
|
||||
self.class.link_overwrite_paths.any? do |p|
|
||||
p == to_check ||
|
||||
to_check.start_with?(p.chomp("/") + "/") ||
|
||||
/^#{Regexp.escape(p).gsub('\*', ".*?")}$/ === to_check
|
||||
to_check =~ /^#{Regexp.escape(p).gsub('\*', ".*?")}$/
|
||||
end
|
||||
end
|
||||
|
||||
@ -1246,7 +1244,7 @@ class Formula
|
||||
|
||||
# @private
|
||||
def <=>(other)
|
||||
return unless Formula === other
|
||||
return unless other.is_a?(Formula)
|
||||
name <=> other.name
|
||||
end
|
||||
|
||||
@ -1776,9 +1774,7 @@ class Formula
|
||||
ENV["HOMEBREW_CC_LOG_PATH"] = logfn
|
||||
|
||||
# TODO: system "xcodebuild" is deprecated, this should be removed soon.
|
||||
if cmd.to_s.start_with? "xcodebuild"
|
||||
ENV.remove_cc_etc
|
||||
end
|
||||
ENV.remove_cc_etc if cmd.to_s.start_with? "xcodebuild"
|
||||
|
||||
# Turn on argument filtering in the superenv compiler wrapper.
|
||||
# We should probably have a better mechanism for this than adding
|
||||
@ -1786,9 +1782,7 @@ class Formula
|
||||
if cmd == "python"
|
||||
setup_py_in_args = %w[setup.py build.py].include?(args.first)
|
||||
setuptools_shim_in_args = args.any? { |a| a.to_s.start_with? "import setuptools" }
|
||||
if setup_py_in_args || setuptools_shim_in_args
|
||||
ENV.refurbish_args
|
||||
end
|
||||
ENV.refurbish_args if setup_py_in_args || setuptools_shim_in_args
|
||||
end
|
||||
|
||||
$stdout.reopen(out)
|
||||
@ -2226,7 +2220,7 @@ class Formula
|
||||
# If this formula conflicts with another one.
|
||||
# <pre>conflicts_with "imagemagick", :because => "because this is just a stupid example"</pre>
|
||||
def conflicts_with(*names)
|
||||
opts = Hash === names.last ? names.pop : {}
|
||||
opts = names.last.is_a?(Hash) ? names.pop : {}
|
||||
names.each { |name| conflicts << FormulaConflict.new(name, opts[:because]) }
|
||||
end
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
require "utils/shell"
|
||||
|
||||
module FormulaCellarChecks
|
||||
def check_PATH(bin)
|
||||
def check_env_path(bin)
|
||||
# warn the user if stuff was installed outside of their PATH
|
||||
return unless bin.directory?
|
||||
return if bin.children.empty?
|
||||
|
||||
@ -24,7 +24,9 @@ class FormulaInstaller
|
||||
private(*names)
|
||||
names.each do |name|
|
||||
predicate = "#{name}?"
|
||||
define_method(predicate) { !!send(name) }
|
||||
define_method(predicate) do
|
||||
send(name) ? true : false
|
||||
end
|
||||
private(predicate)
|
||||
end
|
||||
end
|
||||
@ -71,7 +73,8 @@ class FormulaInstaller
|
||||
end
|
||||
|
||||
def build_bottle?
|
||||
!!@build_bottle && !formula.bottle_disabled?
|
||||
return false unless @build_bottle
|
||||
!formula.bottle_disabled?
|
||||
end
|
||||
|
||||
def pour_bottle?(install_bottle_options = { warn: false })
|
||||
@ -254,9 +257,7 @@ class FormulaInstaller
|
||||
|
||||
unless @poured_bottle
|
||||
not_pouring = !pour_bottle || @pour_failed
|
||||
if not_pouring && !ignore_deps?
|
||||
compute_and_install_dependencies
|
||||
end
|
||||
compute_and_install_dependencies if not_pouring && !ignore_deps?
|
||||
build
|
||||
clean
|
||||
end
|
||||
@ -543,7 +544,7 @@ class FormulaInstaller
|
||||
@build_time ||= Time.now - @start_time if @start_time && !interactive?
|
||||
end
|
||||
|
||||
def sanitized_ARGV_options
|
||||
def sanitized_argv_options
|
||||
args = []
|
||||
args << "--ignore-dependencies" if ignore_deps?
|
||||
|
||||
@ -582,7 +583,7 @@ class FormulaInstaller
|
||||
end
|
||||
|
||||
def build_argv
|
||||
sanitized_ARGV_options + options.as_flags
|
||||
sanitized_argv_options + options.as_flags
|
||||
end
|
||||
|
||||
def build
|
||||
@ -810,8 +811,8 @@ class FormulaInstaller
|
||||
end
|
||||
|
||||
def audit_installed
|
||||
audit_check_output(check_PATH(formula.bin))
|
||||
audit_check_output(check_PATH(formula.sbin))
|
||||
audit_check_output(check_env_path(formula.bin))
|
||||
audit_check_output(check_env_path(formula.sbin))
|
||||
super
|
||||
end
|
||||
|
||||
|
||||
@ -35,9 +35,8 @@ class FormulaLock
|
||||
if @lockfile.nil? || @lockfile.closed?
|
||||
@lockfile = @path.open(File::RDWR | File::CREAT)
|
||||
@lockfile.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
||||
@lockfile
|
||||
else
|
||||
@lockfile
|
||||
end
|
||||
|
||||
@lockfile
|
||||
end
|
||||
end
|
||||
|
||||
@ -52,9 +52,7 @@ class FormulaVersions
|
||||
rev_list(branch) do |rev|
|
||||
formula_at_revision(rev) do |f|
|
||||
bottle = f.bottle_specification
|
||||
unless bottle.checksums.empty?
|
||||
map[f.pkg_version] << bottle.rebuild
|
||||
end
|
||||
map[f.pkg_version] << bottle.rebuild unless bottle.checksums.empty?
|
||||
end
|
||||
end
|
||||
map
|
||||
|
||||
@ -301,9 +301,7 @@ class Formulary
|
||||
return TapLoader.new(ref)
|
||||
end
|
||||
|
||||
if File.extname(ref) == ".rb"
|
||||
return FromPathLoader.new(ref)
|
||||
end
|
||||
return FromPathLoader.new(ref) if File.extname(ref) == ".rb"
|
||||
|
||||
formula_with_that_name = core_path(ref)
|
||||
if formula_with_that_name.file?
|
||||
@ -311,9 +309,7 @@ class Formulary
|
||||
end
|
||||
|
||||
possible_alias = CoreTap.instance.alias_dir/ref
|
||||
if possible_alias.file?
|
||||
return AliasLoader.new(possible_alias)
|
||||
end
|
||||
return AliasLoader.new(possible_alias) if possible_alias.file?
|
||||
|
||||
possible_tap_formulae = tap_paths(ref)
|
||||
if possible_tap_formulae.size > 1
|
||||
|
||||
@ -62,12 +62,17 @@ class Keg
|
||||
end
|
||||
|
||||
# locale-specific directories have the form language[_territory][.codeset][@modifier]
|
||||
LOCALEDIR_RX = /(locale|man)\/([a-z]{2}|C|POSIX)(_[A-Z]{2})?(\.[a-zA-Z\-0-9]+(@.+)?)?/
|
||||
LOCALEDIR_RX = %r{(locale|man)/([a-z]{2}|C|POSIX)(_[A-Z]{2})?(\.[a-zA-Z\-0-9]+(@.+)?)?}
|
||||
INFOFILE_RX = %r{info/([^.].*?\.info|dir)$}
|
||||
TOP_LEVEL_DIRECTORIES = %w[bin etc include lib sbin share var Frameworks].freeze
|
||||
ALL_TOP_LEVEL_DIRECTORIES = (TOP_LEVEL_DIRECTORIES + %w[lib/pkgconfig share/locale share/man opt]).freeze
|
||||
PRUNEABLE_DIRECTORIES = %w[bin etc include lib sbin share Frameworks LinkedKegs var/homebrew/linked].map do |d|
|
||||
case d when "LinkedKegs" then HOMEBREW_LIBRARY/d else HOMEBREW_PREFIX/d end
|
||||
PRUNEABLE_DIRECTORIES = %w[bin etc include lib sbin share Frameworks LinkedKegs var/homebrew/linked].map do |dir|
|
||||
case dir
|
||||
when "LinkedKegs"
|
||||
HOMEBREW_LIBRARY/dir
|
||||
else
|
||||
HOMEBREW_PREFIX/dir
|
||||
end
|
||||
end
|
||||
|
||||
# These paths relative to the keg's share directory should always be real
|
||||
@ -249,10 +254,10 @@ class Keg
|
||||
|
||||
def completion_installed?(shell)
|
||||
dir = case shell
|
||||
when :bash then path.join("etc", "bash_completion.d")
|
||||
when :zsh then path.join("share", "zsh", "site-functions")
|
||||
when :fish then path.join("share", "fish", "vendor_completions.d")
|
||||
end
|
||||
when :bash then path.join("etc", "bash_completion.d")
|
||||
when :zsh then path.join("share", "zsh", "site-functions")
|
||||
when :fish then path.join("share", "fish", "vendor_completions.d")
|
||||
end
|
||||
dir && dir.directory? && !dir.children.empty?
|
||||
end
|
||||
|
||||
@ -318,13 +323,13 @@ class Keg
|
||||
when "locale/locale.alias" then :skip_file
|
||||
when INFOFILE_RX then :info
|
||||
when LOCALEDIR_RX then :mkpath
|
||||
when /^icons\/.*\/icon-theme\.cache$/ then :skip_file
|
||||
when %r{^icons/.*/icon-theme\.cache$} then :skip_file
|
||||
# all icons subfolders should also mkpath
|
||||
when /^icons\// then :mkpath
|
||||
when %r{^icons/} then :mkpath
|
||||
when /^zsh/ then :mkpath
|
||||
when /^fish/ then :mkpath
|
||||
# Lua, Lua51, Lua53 all need the same handling.
|
||||
when /^lua\// then :mkpath
|
||||
when %r{^lua/} then :mkpath
|
||||
when %r{^guile/} then :mkpath
|
||||
when *SHARE_PATHS then :mkpath
|
||||
else :link
|
||||
@ -362,7 +367,7 @@ class Keg
|
||||
# the :link strategy. However, for Foo.framework and
|
||||
# Foo.framework/Versions we have to use :mkpath so that multiple formulae
|
||||
# can link their versions into it and `brew [un]link` works.
|
||||
if relative_path.to_s =~ /[^\/]*\.framework(\/Versions)?$/
|
||||
if relative_path.to_s =~ %r{[^/]*\.framework(/Versions)?$}
|
||||
:mkpath
|
||||
else
|
||||
:link
|
||||
|
||||
@ -79,19 +79,16 @@ module Language
|
||||
|
||||
# if we have build flags, we have to pass them to cabal install to resolve the necessary
|
||||
# dependencies, and call cabal configure afterwards to set the flags again for compile
|
||||
flags = ""
|
||||
if options[:flags]
|
||||
flags = "--flags=#{options[:flags].join(" ")}"
|
||||
end
|
||||
flags = "--flags=#{options[:flags].join(" ")}" if options[:flags]
|
||||
|
||||
args_and_flags = args
|
||||
args_and_flags << flags unless flags.empty?
|
||||
args_and_flags << flags unless flags.nil?
|
||||
|
||||
# install dependencies in the sandbox
|
||||
cabal_install "--only-dependencies", *args_and_flags
|
||||
|
||||
# call configure if build flags are set
|
||||
cabal_configure flags unless flags.empty?
|
||||
cabal_configure flags unless flags.nil?
|
||||
|
||||
# install the main package in the destination dir
|
||||
cabal_install "--prefix=#{prefix}", *args
|
||||
|
||||
@ -337,9 +337,7 @@ class Migrator
|
||||
end
|
||||
|
||||
def backup_oldname_cellar
|
||||
unless old_cellar.exist?
|
||||
FileUtils.mv(new_cellar, old_cellar)
|
||||
end
|
||||
FileUtils.mv(new_cellar, old_cellar) unless old_cellar.exist?
|
||||
end
|
||||
|
||||
def backup_old_tabs
|
||||
|
||||
@ -14,7 +14,7 @@ class Option
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
return unless Option === other
|
||||
return unless other.is_a?(Option)
|
||||
name <=> other.name
|
||||
end
|
||||
|
||||
|
||||
@ -175,7 +175,7 @@ module OS
|
||||
# Returns true even if outdated tools are installed, e.g.
|
||||
# tools from Xcode 4.x on 10.9
|
||||
def installed?
|
||||
!!detect_version
|
||||
!detect_version.nil?
|
||||
end
|
||||
|
||||
def update_instructions
|
||||
|
||||
@ -89,7 +89,7 @@ class DATAPatch < EmbeddedPatch
|
||||
path.open("rb") do |f|
|
||||
begin
|
||||
line = f.gets
|
||||
end until line.nil? || /^__END__$/ === line
|
||||
end until line.nil? || line =~ /^__END__$/
|
||||
data << line while line = f.gets
|
||||
end
|
||||
data
|
||||
|
||||
@ -32,7 +32,7 @@ class PkgVersion
|
||||
alias_method :to_str, :to_s
|
||||
|
||||
def <=>(other)
|
||||
return unless PkgVersion === other
|
||||
return unless other.is_a?(PkgVersion)
|
||||
(version <=> other.version).nonzero? || revision <=> other.revision
|
||||
end
|
||||
alias_method :eql?, :==
|
||||
|
||||
@ -56,7 +56,7 @@ class Requirement
|
||||
def satisfied?
|
||||
result = self.class.satisfy.yielder { |p| instance_eval(&p) }
|
||||
@satisfied_result = result
|
||||
!!result
|
||||
result ? true : false
|
||||
end
|
||||
|
||||
# Overriding #fatal? is deprecated.
|
||||
@ -83,7 +83,7 @@ class Requirement
|
||||
# PATH.
|
||||
# This is undocumented magic and it should be removed, but we need to add
|
||||
# a way to declare path-based requirements that work with superenv first.
|
||||
if Pathname === @satisfied_result
|
||||
if @satisfied_result.is_a?(Pathname)
|
||||
parent = @satisfied_result.parent
|
||||
unless ENV["PATH"].split(File::PATH_SEPARATOR).include?(parent.to_s)
|
||||
ENV.append_path("PATH", parent)
|
||||
@ -115,7 +115,7 @@ class Requirement
|
||||
def to_dependency
|
||||
f = self.class.default_formula
|
||||
raise "No default formula defined for #{inspect}" if f.nil?
|
||||
if HOMEBREW_TAP_FORMULA_REGEX === f
|
||||
if f =~ HOMEBREW_TAP_FORMULA_REGEX
|
||||
TapDependency.new(f, tags, method(:modify_build_environment), name)
|
||||
else
|
||||
Dependency.new(f, tags, method(:modify_build_environment), name)
|
||||
|
||||
@ -22,7 +22,7 @@ class XcodeRequirement < Requirement
|
||||
satisfy(build_env: false) { xcode_installed_version }
|
||||
|
||||
def initialize(tags)
|
||||
@version = tags.find { |t| tags.delete(t) if /(\d\.)+\d/ === t }
|
||||
@version = tags.find { |tag| tags.delete(tag) if tag =~ /(\d\.)+\d/ }
|
||||
super
|
||||
end
|
||||
|
||||
@ -39,11 +39,11 @@ class XcodeRequirement < Requirement
|
||||
Installing just the Command Line Tools is not sufficient.
|
||||
EOS
|
||||
if MacOS.version >= :lion
|
||||
message += <<-EOS.undent
|
||||
message + <<-EOS.undent
|
||||
Xcode can be installed from the App Store.
|
||||
EOS
|
||||
else
|
||||
message += <<-EOS.undent
|
||||
message + <<-EOS.undent
|
||||
Xcode can be installed from https://developer.apple.com/xcode/downloads/
|
||||
EOS
|
||||
end
|
||||
|
||||
@ -65,11 +65,12 @@ class SoftwareSpec
|
||||
end
|
||||
|
||||
def bottle_unneeded?
|
||||
!!@bottle_disable_reason && @bottle_disable_reason.unneeded?
|
||||
return false unless @bottle_disable_reason
|
||||
@bottle_disable_reason.unneeded?
|
||||
end
|
||||
|
||||
def bottle_disabled?
|
||||
!!@bottle_disable_reason
|
||||
@bottle_disable_reason ? true : false
|
||||
end
|
||||
|
||||
attr_reader :bottle_disable_reason
|
||||
@ -116,12 +117,12 @@ class SoftwareSpec
|
||||
|
||||
def option(name, description = "")
|
||||
opt = PREDEFINED_OPTIONS.fetch(name) do
|
||||
if Symbol === name
|
||||
if name.is_a?(Symbol)
|
||||
opoo "Passing arbitrary symbols to `option` is deprecated: #{name.inspect}"
|
||||
puts "Symbols are reserved for future use, please pass a string instead"
|
||||
name = name.to_s
|
||||
end
|
||||
unless String === name
|
||||
unless name.is_a?(String)
|
||||
raise ArgumentError, "option name must be string or symbol; got a #{name.class}: #{name}"
|
||||
end
|
||||
raise ArgumentError, "option name is required" if name.empty?
|
||||
@ -318,7 +319,7 @@ class BottleSpecification
|
||||
end
|
||||
|
||||
def tag?(tag)
|
||||
!!checksum_for(tag)
|
||||
checksum_for(tag) ? true : false
|
||||
end
|
||||
|
||||
# Checksum methods in the DSL's bottle block optionally take
|
||||
|
||||
@ -328,9 +328,9 @@ class Tab < OpenStruct
|
||||
else
|
||||
s << "Built from source"
|
||||
end
|
||||
if time
|
||||
s << Time.at(time).strftime("on %Y-%m-%d at %H:%M:%S")
|
||||
end
|
||||
|
||||
s << Time.at(time).strftime("on %Y-%m-%d at %H:%M:%S") if time
|
||||
|
||||
unless used_options.empty?
|
||||
s << "with:"
|
||||
s << used_options.to_a.join(" ")
|
||||
|
||||
@ -154,7 +154,7 @@ class DiagnosticChecksTest < Homebrew::TestCase
|
||||
def test_check_dyld_vars
|
||||
ENV["DYLD_INSERT_LIBRARIES"] = "foo"
|
||||
assert_match "Setting DYLD_INSERT_LIBRARIES",
|
||||
@checks.check_DYLD_vars
|
||||
@checks.check_dyld_vars
|
||||
end
|
||||
|
||||
def test_check_for_symlinked_cellar
|
||||
|
||||
@ -118,7 +118,7 @@ class GitDownloadStrategyTests < Homebrew::TestCase
|
||||
|
||||
def test_source_modified_time
|
||||
setup_git_repo
|
||||
assert_equal 1242860651, @strategy.source_modified_time.to_i
|
||||
assert_equal 1_242_860_651, @strategy.source_modified_time.to_i
|
||||
end
|
||||
|
||||
def test_last_commit
|
||||
|
||||
@ -26,7 +26,7 @@ class PathnameTests < Homebrew::TestCase
|
||||
mkdir_p @dir/"a-directory"
|
||||
touch @dir/".DS_Store"
|
||||
touch @dir/"a-file"
|
||||
File.truncate(@dir/"a-file", 1048576)
|
||||
File.truncate(@dir/"a-file", 1_048_576)
|
||||
ln_s @dir/"a-file", @dir/"a-symlink"
|
||||
ln @dir/"a-file", @dir/"a-hardlink"
|
||||
assert_equal 3, @dir.file_count
|
||||
|
||||
@ -22,9 +22,7 @@ module Utils
|
||||
return if git_available?
|
||||
|
||||
# we cannot install brewed git if homebrew/core is unavailable.
|
||||
unless CoreTap.instance.installed?
|
||||
raise "Git is unavailable"
|
||||
end
|
||||
raise "Git is unavailable" unless CoreTap.instance.installed?
|
||||
|
||||
begin
|
||||
oh1 "Installing git"
|
||||
|
||||
@ -208,7 +208,7 @@ class Version
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
return unless Version === other
|
||||
return unless other.is_a?(Version)
|
||||
return 0 if version == other.version
|
||||
return 1 if head? && !other.head?
|
||||
return -1 if !head? && other.head?
|
||||
@ -386,7 +386,7 @@ class Version
|
||||
|
||||
# e.g. http://mirrors.jenkins-ci.org/war/1.486/jenkins.war
|
||||
# e.g. https://github.com/foo/bar/releases/download/0.10.11/bar.phar
|
||||
m = /\/(\d\.\d+(\.\d+)?)\//.match(spec_s)
|
||||
m = %r{/(\d\.\d+(\.\d+)?)}.match(spec_s)
|
||||
return m.captures.first unless m.nil?
|
||||
|
||||
# e.g. http://www.ijg.org/files/jpegsrc.v8d.tar.gz
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user