Merge branch 'master' into undeclared_runtime_dependencies

This commit is contained in:
Mike McQuaid 2018-04-25 10:41:43 +01:00 committed by GitHub
commit 598bbd4c72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
255 changed files with 2897 additions and 3719 deletions

View File

@ -88,3 +88,7 @@ Style/HashSyntax:
# so many of these in formulae but none in here
Style/TrailingBodyOnMethodDefinition:
Enabled: true
Rspec/ExpectActual:
Exclude:
- 'test/missing_formula_spec.rb'

View File

@ -32,7 +32,7 @@ class PATH
end
def to_ary
@paths
@paths.dup.to_ary
end
alias to_a to_ary

View File

@ -14,12 +14,13 @@ end
require "pathname"
HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent
require "English"
unless $LOAD_PATH.include?(HOMEBREW_LIBRARY_PATH.to_s)
$LOAD_PATH.unshift(HOMEBREW_LIBRARY_PATH.to_s)
end
require "global"
require "tap"
if ARGV == %w[--version] || ARGV == %w[-v]
puts "Homebrew #{HOMEBREW_VERSION}"

View File

@ -1,4 +1,3 @@
require "set"
class BuildEnvironment
def initialize(*settings)

View File

@ -1,5 +1,4 @@
require "hardware"
require "utils"
require "hbc/artifact"
require "hbc/audit"
@ -20,8 +19,6 @@ require "hbc/locations"
require "hbc/config"
require "hbc/macos"
require "hbc/pkg"
require "hbc/qualified_token"
require "hbc/scopes"
require "hbc/staged"
require "hbc/system_command"
require "hbc/topological_hash"
@ -32,7 +29,6 @@ require "hbc/version"
module Hbc
include Locations
include Scopes
include Utils
def self.init

View File

@ -1,4 +1,3 @@
require "pathname"
require "timeout"
require "hbc/artifact/abstract_artifact"

View File

@ -3,11 +3,20 @@ require "hbc/metadata"
module Hbc
class Cask
extend Enumerable
extend Forwardable
include Metadata
attr_reader :token, :sourcefile_path, :config
def self.each
return to_enum unless block_given?
Tap.flat_map(&:cask_files).each do |f|
yield CaskLoader::FromTapPathLoader.new(f).load
end
end
def tap
return super if block_given? # Object#tap
@tap
@ -43,11 +52,13 @@ module Hbc
end
def full_name
if @tap.nil? || @tap == Hbc.default_tap
token
else
"#{@tap}/#{token}"
end
return token if tap == Hbc.default_tap
qualified_token
end
def qualified_token
return token if tap.nil?
"#{tap.name}/#{token}"
end
def installed?

View File

@ -15,5 +15,17 @@ module Hbc
SystemCommand.run("/usr/sbin/chown", args: [Utils.current_user, Hbc.caskroom], sudo: sudo)
SystemCommand.run("/usr/bin/chgrp", args: ["admin", Hbc.caskroom], sudo: sudo)
end
def casks
Pathname.glob(Hbc.caskroom.join("*")).sort.select(&:directory?).map do |path|
token = path.basename.to_s
if tap_path = CaskLoader.tap_paths(token).first
next CaskLoader::FromTapPathLoader.new(tap_path).load
end
CaskLoader::FromPathLoader.new(Pathname.glob(path.join(".metadata/*/*/*/*.rb")).first).load
end
end
end
end

View File

@ -9,7 +9,7 @@ module Hbc
end
def run
failed_casks = casks(alternative: -> { Hbc.all })
failed_casks = casks(alternative: -> { Cask.to_a })
.reject { |cask| audit(cask) }
return if failed_casks.empty?

View File

@ -60,16 +60,12 @@ module Hbc
end
def self.repo_info(cask)
user, repo, token = QualifiedToken.parse(Hbc.all_tokens.detect { |t| t.split("/").last == cask.token })
return if cask.tap.nil?
return if user.nil? || repo.nil?
remote_tap = Tap.fetch(user, repo)
url = if remote_tap.custom_remote? && !remote_tap.remote.nil?
remote_tap.remote
url = if cask.tap.custom_remote? && !cask.tap.remote.nil?
cask.tap.remote
else
"#{remote_tap.default_remote}/blob/master/Casks/#{token}.rb"
"#{cask.tap.default_remote}/blob/master/Casks/#{cask.token}.rb"
end
puts "From: #{Formatter.url(url)}"

View File

@ -58,7 +58,7 @@ module Hbc
@stanza = :artifacts
end
casks(alternative: -> { Hbc.all }).each do |cask|
casks(alternative: -> { Cask.to_a }).each do |cask|
print "#{cask}\t" if table?
begin

View File

@ -37,7 +37,7 @@ module Hbc
end
def list_installed
installed_casks = Hbc.installed
installed_casks = Caskroom.casks
if one?
puts installed_casks.map(&:to_s)

View File

@ -10,7 +10,7 @@ module Hbc
end
def run
casks(alternative: -> { Hbc.installed }).each do |cask|
casks(alternative: -> { Caskroom.casks }).each do |cask|
odebug "Checking update info of Cask #{cask}"
self.class.list_if_outdated(cask, greedy?, verbose?)
end

View File

@ -3,7 +3,7 @@ module Hbc
class Search < AbstractCommand
def run
if args.empty?
puts Formatter.columns(CLI.nice_listing(Hbc.all_tokens))
puts Formatter.columns(CLI.nice_listing(Cask.map(&:qualified_token)))
else
results = self.class.search(*args)
self.class.render_results(*results)
@ -30,6 +30,7 @@ module Hbc
opoo "Error searching on GitHub: #{error}\n"
[]
end
matches.map do |match|
tap = Tap.fetch(match["repository"]["full_name"])
next if tap.installed?
@ -42,7 +43,7 @@ module Hbc
partial_matches = []
search_term = arguments.join(" ")
search_regexp = extract_regexp arguments.first
all_tokens = CLI.nice_listing(Hbc.all_tokens)
all_tokens = CLI.nice_listing(Cask.map(&:qualified_token))
if search_regexp
search_term = arguments.first
partial_matches = all_tokens.grep(/#{search_regexp}/i)
@ -65,7 +66,7 @@ module Hbc
return
end
if !exact_match && partial_matches.empty?
if !exact_match && partial_matches.empty? && remote_matches.empty?
puts "No Cask found for \"#{search_term}\"."
return
end

View File

@ -27,7 +27,7 @@ module Hbc
def cask_paths
@cask_paths ||= if args.empty?
Hbc.all_tapped_cask_dirs
Tap.map(&:cask_dir).select(&:directory?)
elsif args.any? { |file| File.exist?(file) }
args
else

View File

@ -13,7 +13,7 @@ module Hbc
def run
outdated_casks = casks(alternative: lambda {
Hbc.installed.select do |cask|
Caskroom.casks.select do |cask|
cask.outdated?(greedy?)
end
}).select { |cask| cask.outdated?(true) }

View File

@ -1,5 +1,3 @@
require "tmpdir"
require "hbc/container/base"
module Hbc

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "set"
require "tempfile"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "tmpdir"
require "hbc/container/base"

View File

@ -1,4 +1,3 @@
require "set"
require "locale"
require "hbc/artifact"

View File

@ -1,4 +1,3 @@
require "tap"
module Hbc
module Locations

View File

@ -1,4 +1,3 @@
require "set"
require "os/mac/version"
@ -239,26 +238,35 @@ module OS
# TODO: There should be a way to specify a containing
# directory under which nothing can be deleted.
UNDELETABLE_DIRS = [
UNDELETABLE_PATHS = [
"~/",
"~/Applications",
"~/Applications/.localized",
"~/Desktop",
"~/Desktop/.localized",
"~/Documents",
"~/Documents/.localized",
"~/Downloads",
"~/Downloads/.localized",
"~/Mail",
"~/Movies",
"~/Movies/.localized",
"~/Music",
"~/Music/.localized",
"~/Music/iTunes",
"~/Music/iTunes/iTunes Music",
"~/Music/iTunes/Album Artwork",
"~/News",
"~/Pictures",
"~/Pictures/.localized",
"~/Pictures/Desktops",
"~/Pictures/Photo Booth",
"~/Pictures/iChat Icons",
"~/Pictures/iPhoto Library",
"~/Public",
"~/Public/.localized",
"~/Sites",
"~/Sites/.localized",
"~/Library",
"~/Library/.localized",
"~/Library/Accessibility",
@ -365,17 +373,17 @@ module OS
"~/Library/Widgets",
"~/Library/Workflows",
]
.map { |x| Pathname(x.sub(%r{^~(?=(/|$))}, Dir.home)).expand_path }
.to_set
.union(SYSTEM_DIRS)
.freeze
.map { |path| Pathname(path.sub(%r{^~(?=(/|$))}, Dir.home)).expand_path }
.to_set
.union(SYSTEM_DIRS)
.freeze
def system_dir?(dir)
SYSTEM_DIRS.include?(Pathname.new(dir).expand_path)
end
def undeletable?(dir)
UNDELETABLE_DIRS.include?(Pathname.new(dir).expand_path)
def undeletable?(path)
UNDELETABLE_PATHS.include?(Pathname.new(path).expand_path)
end
end
end

View File

@ -22,7 +22,7 @@ module Hbc
end
path = if timestamp == :latest
Pathname.glob(metadata_versioned_path(version: version).join("*")).sort.last
Pathname.glob(metadata_versioned_path(version: version).join("*")).max
else
timestamp = new_timestamp if timestamp == :now
metadata_versioned_path(version: version).join(timestamp)

View File

@ -1,11 +0,0 @@
module Hbc
module QualifiedToken
def self.parse(arg)
return nil unless arg.is_a?(String)
return nil unless match = arg.downcase.match(HOMEBREW_TAP_CASK_REGEX)
user, repo, token = match.captures
odebug "[user, repo, token] might be [#{user}, #{repo}, #{token}]"
[user, repo, token]
end
end
end

View File

@ -1,47 +0,0 @@
module Hbc
module Scopes
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def all
all_tokens.map(&CaskLoader.public_method(:load))
end
def all_tapped_cask_dirs
Tap.map(&:cask_dir).select(&:directory?)
end
def all_tokens
Tap.flat_map do |t|
t.cask_files.map do |p|
"#{t.name}/#{File.basename(p, ".rb")}"
end
end
end
def installed
# CaskLoader.load has some DWIM which is slow. Optimize here
# by spoon-feeding CaskLoader.load fully-qualified paths.
# TODO: speed up Hbc::Source::Tapped (main perf drag is calling Hbc.all_tokens repeatedly)
# TODO: ability to specify expected source when calling CaskLoader.load (minor perf benefit)
Pathname.glob(caskroom.join("*"))
.sort
.map do |caskroom_path|
token = caskroom_path.basename.to_s
path_to_cask = all_tapped_cask_dirs.find do |tap_dir|
tap_dir.join("#{token}.rb").exist?
end
if path_to_cask
CaskLoader.load(path_to_cask.join("#{token}.rb"))
else
CaskLoader.load(token)
end
end
end
end
end
end

View File

@ -33,6 +33,7 @@ module Hbc
def set_ownership(paths, user: current_user, group: "staff")
full_paths = remove_nonexistent(paths)
return if full_paths.empty?
ohai "Changing ownership of paths required by #{@cask}; your password may be necessary"
@command.run!("/usr/sbin/chown", args: ["-R", "--", "#{user}:#{group}"] + full_paths,
sudo: true)
end

View File

@ -4,17 +4,6 @@ require "stringio"
BUG_REPORTS_URL = "https://github.com/caskroom/homebrew-cask#reporting-bugs".freeze
class Buffer < StringIO
extend Predicable
attr_predicate :tty?
def initialize(tty = false)
super()
@tty = tty
end
end
# global methods
def odebug(title, *sput)

View File

@ -1,4 +1,3 @@
require "forwardable"
require "language/python"
class Caveats

View File

@ -11,16 +11,20 @@ module Homebrew
def initialize(&block)
@parser = OptionParser.new
@parsed_args = OpenStruct.new
# undefine tap to allow --tap argument
@parsed_args.instance_eval { undef tap }
instance_eval(&block)
end
def switch(*names, description: nil, env: nil)
description = option_to_description(*names) if description.nil?
names, env = common_switch(*names) if names.first.is_a?(Symbol)
global_switch = names.first.is_a?(Symbol)
names, env = common_switch(*names) if global_switch
@parser.on(*names, description) do
enable_switch(*names)
enable_switch(*names, global_switch)
end
enable_switch(*names) if !env.nil? && !ENV["HOMEBREW_#{env.to_s.upcase}"].nil?
enable_switch(*names, global_switch) if !env.nil? &&
!ENV["HOMEBREW_#{env.to_s.upcase}"].nil?
end
def comma_array(name, description: nil)
@ -30,14 +34,15 @@ module Homebrew
end
end
def flag(name, description: nil, required: false)
if required
option_required = OptionParser::REQUIRED_ARGUMENT
def flag(name, description: nil)
if name.end_with? "="
required = OptionParser::REQUIRED_ARGUMENT
name.chomp! "="
else
option_required = OptionParser::OPTIONAL_ARGUMENT
required = OptionParser::OPTIONAL_ARGUMENT
end
description = option_to_description(name) if description.nil?
@parser.on(name, description, option_required) do |option_value|
@parser.on(name, description, required) do |option_value|
@parsed_args[option_to_name(name)] = option_value
end
end
@ -47,27 +52,33 @@ module Homebrew
end
def option_to_description(*names)
names.map { |name| name.to_s.sub(/\A--?/, "").tr("-", " ") }.sort.last
names.map { |name| name.to_s.sub(/\A--?/, "").tr("-", " ") }.max
end
def parse(cmdline_args = ARGV)
@parser.parse!(cmdline_args)
@parser.parse(cmdline_args)
@parsed_args
end
private
def enable_switch(*names)
def enable_switch(*names, global_switch)
names.each do |name|
if global_switch
Homebrew.args["#{option_to_name(name)}?"] = true
next
end
@parsed_args["#{option_to_name(name)}?"] = true
end
end
# These are common/global switches accessible throughout Homebrew
def common_switch(name)
case name
when :quiet then [["-q", "--quiet"], :quiet]
when :verbose then [["-v", "--verbose"], :verbose]
when :debug then [["-d", "--debug"], :debug]
when :force then [["-f", "--force"], :force]
else name
end
end

View File

@ -4,8 +4,6 @@
#: * `--repository` <user>`/`<repo>:
#: Display where tap <user>`/`<repo>'s directory is located.
require "tap"
module Homebrew
module_function

View File

@ -12,7 +12,6 @@
#: deleted. If you want to delete those too: `rm -rf $(brew --cache)`
require "cleanup"
require "utils"
module Homebrew
module_function

View File

@ -28,7 +28,6 @@ module Homebrew
slow_checks = %w[
check_for_broken_symlinks
check_missing_deps
check_for_linked_keg_only_brews
]
methods = (checks.all.sort - slow_checks) + slow_checks
else

View File

@ -119,7 +119,7 @@ module Homebrew
def create_issue(repo, title, body)
url = "https://api.github.com/repos/#{repo}/issues"
data = { "title" => title, "body" => body }
scopes = GitHub::CREATE_ISSUE_SCOPES
scopes = GitHub::CREATE_ISSUE_FORK_OR_PR_SCOPES
GitHub.open_api(url, data: data, scopes: scopes)["html_url"]
end

View File

@ -1,7 +1,7 @@
HOMEBREW_HELP = <<~EOS.freeze
Example usage:
brew search [TEXT|/REGEX/]
brew (info|home|options) [FORMULA...]
brew info [FORMULA...]
brew install FORMULA...
brew update
brew upgrade [FORMULA...]
@ -11,17 +11,17 @@ HOMEBREW_HELP = <<~EOS.freeze
Troubleshooting:
brew config
brew doctor
brew install -vd FORMULA
brew install --verbose --debug FORMULA
Developers:
Contributing:
brew create [URL [--no-fetch]]
brew edit [FORMULA...]
https://docs.brew.sh/Formula-Cookbook
Further help:
man brew
brew commands
brew help [COMMAND]
brew home
man brew
https://docs.brew.sh
EOS
# NOTE Keep the lenth of vanilla --help less than 25 lines!

View File

@ -60,7 +60,7 @@ module Homebrew
rescue FormulaUnavailableError => e
ofail e.message
# No formula with this name, try a missing formula lookup
if (reason = Homebrew::MissingFormula.reason(f))
if (reason = MissingFormula.reason(f))
$stderr.puts reason
end
end

View File

@ -71,7 +71,6 @@ require "missing_formula"
require "diagnostic"
require "cmd/search"
require "formula_installer"
require "tap"
require "hardware"
require "development_tools"
@ -166,7 +165,8 @@ module Homebrew
formulae << f
else
opoo <<~EOS
#{f.full_name} #{f.pkg_version} is already installed
#{f.full_name} #{f.pkg_version} is already installed and up-to-date
To reinstall #{f.pkg_version}, run `brew reinstall #{f.name}`
EOS
end
elsif (ARGV.build_head? && new_head_installed) || prefix_installed
@ -190,12 +190,17 @@ module Homebrew
EOS
elsif !f.linked? || f.keg_only?
msg = <<~EOS
#{msg}, it's just not linked.
#{msg}, it's just not linked
You can use `brew link #{f}` to link this version.
EOS
elsif ARGV.only_deps?
msg = nil
formulae << f
else
msg = <<~EOS
#{msg} and up-to-date
To reinstall #{f.pkg_version}, run `brew reinstall #{f.name}`
EOS
end
opoo msg if msg
elsif !f.any_version_installed? && old_formula = f.old_installed_formulae.first
@ -252,7 +257,7 @@ module Homebrew
end
ofail e.message
if (reason = Homebrew::MissingFormula.reason(e.name))
if (reason = MissingFormula.reason(e.name))
$stderr.puts reason
return
end

View File

@ -3,7 +3,6 @@
require "formula"
require "tab"
require "set"
module Homebrew
module_function

View File

@ -1,67 +0,0 @@
#: @hide_from_man_page
#: * `linkapps` [`--local`] [<formulae>]:
#: Find installed formulae that provide `.app`-style macOS apps and symlink them
#: into `/Applications`, allowing for easier access (deprecated).
#:
#: Unfortunately `brew linkapps` cannot behave nicely with e.g. Spotlight using
#: either aliases or symlinks and Homebrew formulae do not build "proper" `.app`
#: bundles that can be relocated. Instead, please consider using `brew cask` and
#: migrate formulae using `.app`s to casks.
require "keg"
require "formula"
module Homebrew
module_function
def linkapps
odeprecated "'brew linkapps'"
target_dir = linkapps_target(local: ARGV.include?("--local"))
unless target_dir.directory?
opoo "#{target_dir} does not exist, stopping."
puts "Run `mkdir #{target_dir}` first."
exit 1
end
if ARGV.named.empty?
kegs = Formula.racks.map do |rack|
keg = rack.subdirs.map { |d| Keg.new(d) }
next if keg.empty?
keg.detect(&:linked?) || keg.max_by(&:version)
end
else
kegs = ARGV.kegs
end
link_count = 0
kegs.each do |keg|
keg.apps.each do |app|
puts "Linking: #{app}"
target_app = target_dir/app.basename
if target_app.exist? && !target_app.symlink?
onoe "#{target_app} already exists, skipping."
next
end
# We prefer system `ln` over `FileUtils.ln_sf` because the latter seems
# to have weird failure conditions (that were observed in the past).
system "ln", "-sf", app, target_dir
link_count += 1
end
end
if link_count.zero?
puts "No apps linked to #{target_dir}" if ARGV.verbose?
else
puts "Linked #{Formatter.pluralize(link_count, "app")} to #{target_dir}"
end
end
def linkapps_target(opts = {})
local = opts.fetch(:local, false)
Pathname.new(local ? "~/Applications" : "/Applications").expand_path
end
end

View File

@ -4,6 +4,8 @@
#:
#: If `--hide=`<hidden> is passed, act as if none of <hidden> are installed.
#: <hidden> should be a comma-separated list of formulae.
#:
#: `missing` exits with a non-zero status if any formulae are missing dependencies.
require "formula"
require "tab"
@ -25,6 +27,7 @@ module Homebrew
missing = f.missing_dependencies(hide: ARGV.values("hide"))
next if missing.empty?
Homebrew.failed = true
print "#{f}: " if ff.size > 1
puts missing.join(" ")
end

View File

@ -1,15 +1,12 @@
#: * `prune` [`--dry-run`]:
#: Remove dead symlinks from the Homebrew prefix. This is generally not
#: needed, but can be useful when doing DIY installations. Also remove broken
#: app symlinks from `/Applications` and `~/Applications` that were previously
#: created by `brew linkapps`.
#: needed, but can be useful when doing DIY installations.
#:
#: If `--dry-run` or `-n` is passed, show what would be removed, but do not
#: actually remove anything.
require "keg"
require "cmd/tap"
require "cmd/unlinkapps"
module Homebrew
module_function
@ -49,17 +46,15 @@ module Homebrew
end
end
unless ARGV.dry_run?
if ObserverPathnameExtension.total.zero?
puts "Nothing pruned" if ARGV.verbose?
else
n, d = ObserverPathnameExtension.counts
print "Pruned #{n} symbolic links "
print "and #{d} directories " if d.positive?
puts "from #{HOMEBREW_PREFIX}"
end
end
return if ARGV.dry_run?
unlinkapps_prune(dry_run: ARGV.dry_run?, quiet: true)
if ObserverPathnameExtension.total.zero?
puts "Nothing pruned" if ARGV.verbose?
else
n, d = ObserverPathnameExtension.counts
print "Pruned #{n} symbolic links "
print "and #{d} directories " if d.positive?
puts "from #{HOMEBREW_PREFIX}"
end
end
end

View File

@ -15,8 +15,6 @@
require "formula"
require "missing_formula"
require "utils"
require "official_taps"
require "descriptions"
module Homebrew
@ -66,7 +64,7 @@ module Homebrew
count = local_results.length + tap_results.length
ohai "Searching blacklisted, migrated and deleted formulae..."
if reason = Homebrew::MissingFormula.reason(query, silent: true)
if reason = MissingFormula.reason(query, silent: true)
if count.positive?
puts
puts "If you meant #{query.inspect} specifically:"
@ -110,15 +108,22 @@ module Homebrew
$stderr.puts Formatter.headline("Searching taps on GitHub...", color: :blue)
end
valid_dirnames = ["Formula", "HomebrewFormula", "Casks", "."].freeze
matches = GitHub.search_code(user: ["Homebrew", "caskroom"], filename: query, extension: "rb")
matches = begin
GitHub.search_code(
user: ["Homebrew", "caskroom"],
path: ["Formula", "HomebrewFormula", "Casks", "."],
filename: query,
extension: "rb",
)
rescue GitHub::Error => error
opoo "Error searching on GitHub: #{error}\n"
[]
end
matches.map do |match|
dirname, filename = File.split(match["path"])
next unless valid_dirnames.include?(dirname)
filename = File.basename(match["path"], ".rb")
tap = Tap.fetch(match["repository"]["full_name"])
next if tap.installed? && match["repository"]["owner"]["login"] != "caskroom"
"#{tap.name}/#{File.basename(filename, ".rb")}"
"#{tap.name}/#{filename}"
end.compact
end

View File

@ -19,7 +19,6 @@
#:
#: Exits with a non-zero status if any style violations are found.
require "utils"
require "json"
require "open3"

View File

@ -1,5 +1,5 @@
#: * `switch` <name> <version>:
#: Symlink all of the specific <version> of <name>'s install to Homebrew prefix.
#: * `switch` <formula> <version>:
#: Symlink all of the specific <version> of <formula>'s install to Homebrew prefix.
require "formula"
require "keg"
@ -9,14 +9,15 @@ module Homebrew
module_function
def switch
if ARGV.named.length != 2
onoe "Usage: brew switch <name> <version>"
name = ARGV.first
usage = "Usage: brew switch <formula> <version>"
unless name
onoe usage
exit 1
end
name = ARGV.shift
version = ARGV.shift
rack = Formulary.to_rack(name)
unless rack.directory?
@ -24,13 +25,21 @@ module Homebrew
exit 2
end
# Does the target version exist?
versions = rack.subdirs
.map { |d| Keg.new(d).version }
.sort
.join(", ")
version = ARGV[1]
if !version || ARGV.named.length > 2
onoe usage
puts "#{name} installed versions: #{versions}"
exit 1
end
unless (rack/version).directory?
onoe "#{name} does not have a version \"#{version}\" in the Cellar."
versions = rack.subdirs.map { |d| Keg.new(d).version }.sort
puts "Versions available: #{versions.join(", ")}"
puts "#{name} installed versions: #{versions}"
exit 3
end

View File

@ -15,8 +15,6 @@
#: See the docs for examples of using the JSON output:
#: <https://docs.brew.sh/Querying-Brew>
require "tap"
module Homebrew
module_function

View File

@ -2,8 +2,6 @@
#: Pin <tap>, prioritizing its formulae over core when formula names are supplied
#: by the user. See also `tap-unpin`.
require "tap"
module Homebrew
module_function

View File

@ -1,8 +1,6 @@
#: * `tap-unpin` <tap>:
#: Unpin <tap> so its formulae are no longer prioritized. See also `tap-pin`.
require "tap"
module Homebrew
module_function

View File

@ -1,7 +1,7 @@
#: * `tap`:
#: List all installed taps.
#:
#: * `tap` [`--full`] <user>`/`<repo> [<URL>]:
#: * `tap` [`--full`] [`--force-auto-update`] <user>`/`<repo> [<URL>]:
#: Tap a formula repository.
#:
#: With <URL> unspecified, taps a formula repository from GitHub using HTTPS.
@ -18,6 +18,10 @@
#: if `--full` is passed, a full clone will be used. To convert a shallow copy
#: to a full copy, you can retap passing `--full` without first untapping.
#:
#: By default, only taps hosted on GitHub are auto-updated (for performance
#: reasons). If `--force-auto-update` is passed, this tap will be auto-updated
#: even if it is not hosted on GitHub.
#:
#: `tap` is re-runnable and exits successfully if there's nothing to do.
#: However, retapping with a different <URL> will cause an exception, so first
#: `untap` if you need to modify the <URL>.
@ -25,14 +29,9 @@
#: * `tap` `--repair`:
#: Migrate tapped formulae from symlink-based to directory-based structure.
#:
#: * `tap` `--list-official`:
#: List all official taps.
#:
#: * `tap` `--list-pinned`:
#: List all pinned taps.
require "tap"
module Homebrew
module_function
@ -40,8 +39,7 @@ module Homebrew
if ARGV.include? "--repair"
Tap.each(&:link_completions_and_manpages)
elsif ARGV.include? "--list-official"
require "official_taps"
puts OFFICIAL_TAPS.map { |t| "homebrew/#{t}" }
odeprecated("brew tap --list-official")
elsif ARGV.include? "--list-pinned"
puts Tap.select(&:pinned?).map(&:name)
elsif ARGV.named.empty?
@ -50,6 +48,7 @@ module Homebrew
tap = Tap.fetch(ARGV.named[0])
begin
tap.install clone_target: ARGV.named[1],
force_auto_update: force_auto_update?,
full_clone: full_clone?,
quiet: ARGV.quieter?
rescue TapRemoteMismatchError => e
@ -62,4 +61,9 @@ module Homebrew
def full_clone?
ARGV.include?("--full") || ARGV.homebrew_developer?
end
def force_auto_update?
# if no relevant flag is present, return nil, meaning "no change"
true if ARGV.include?("--force-auto-update")
end
end

View File

@ -1,79 +0,0 @@
#: @hide_from_man_page
#: * `unlinkapps` [`--local`] [`--dry-run`] [<formulae>]:
#: Remove symlinks created by `brew linkapps` from `/Applications` (deprecated).
#:
#: Unfortunately `brew linkapps` cannot behave nicely with e.g. Spotlight using
#: either aliases or symlinks and Homebrew formulae do not build "proper" `.app`
#: bundles that can be relocated. Instead, please consider using `brew cask` and
#: migrate formulae using `.app`s to casks.
require "cmd/linkapps"
module Homebrew
module_function
def unlinkapps
odeprecated "'brew unlinkapps'"
target_dir = linkapps_target(local: ARGV.include?("--local"))
unlinkapps_from_dir(target_dir, dry_run: ARGV.dry_run?)
end
def unlinkapps_prune(opts = {})
opts = opts.merge(prune: true)
unlinkapps_from_dir(linkapps_target(local: false), opts)
unlinkapps_from_dir(linkapps_target(local: true), opts)
end
def unlinkapps_from_dir(target_dir, opts = {})
return unless target_dir.directory?
dry_run = opts.fetch(:dry_run, false)
quiet = opts.fetch(:quiet, false)
apps = Pathname.glob("#{target_dir}/*.app").select do |app|
unlinkapps_unlink?(app, opts)
end
ObserverPathnameExtension.reset_counts!
app_kind = opts.fetch(:prune, false) ? " (broken link)" : ""
apps.each do |app|
app.extend(ObserverPathnameExtension)
if dry_run
puts "Would unlink#{app_kind}: #{app}"
else
puts "Unlinking#{app_kind}: #{app}" unless quiet
app.unlink
end
end
return if dry_run
if ObserverPathnameExtension.total.zero?
puts "No apps unlinked from #{target_dir}" if ARGV.verbose?
else
n = ObserverPathnameExtension.total
puts "Unlinked #{Formatter.pluralize(n, "app")} from #{target_dir}"
end
end
UNLINKAPPS_PREFIXES = %W[
#{HOMEBREW_CELLAR}/
#{HOMEBREW_PREFIX}/opt/
].freeze
def unlinkapps_unlink?(target_app, opts = {})
# Skip non-symlinks and symlinks that don't point into the Homebrew prefix.
app = target_app.readlink.to_s if target_app.symlink?
return false unless app&.start_with?(*UNLINKAPPS_PREFIXES)
if opts.fetch(:prune, false)
!File.exist?(app) # Remove only broken symlinks in prune mode.
elsif ARGV.named.empty?
true
else
ARGV.kegs.any? { |keg| app.start_with?("#{keg}/", "#{keg.opt_record}/") }
end
end
end

View File

@ -1,8 +1,6 @@
#: * `untap` <tap>:
#: Remove a tapped repository.
require "tap"
module Homebrew
module_function

View File

@ -7,7 +7,6 @@ require "migrator"
require "formulary"
require "descriptions"
require "cleanup"
require "utils"
module Homebrew
module_function

View File

@ -493,8 +493,12 @@ EOS
[[ -z "$HOMEBREW_UPDATE_FORCE" ]] && [[ "$UPSTREAM_SHA_HTTP_CODE" = "304" ]] && exit
elif [[ -n "$HOMEBREW_UPDATE_PREINSTALL" ]]
then
# Don't try to do a `git fetch` that may take longer than expected.
exit
FORCE_AUTO_UPDATE="$(git config homebrew.forceautoupdate 2>/dev/null || echo "false")"
if [[ "$FORCE_AUTO_UPDATE" != "true" ]]
then
# Don't try to do a `git fetch` that may take longer than expected.
exit
fi
fi
if [[ -n "$HOMEBREW_VERBOSE" ]]

View File

@ -29,7 +29,7 @@ module Homebrew
Homebrew.perform_preinstall_checks
odeprecated "'brew upgrade --all'", "'brew upgrade'" if ARGV.include?("--all")
odisabled "'brew upgrade --all'", "'brew upgrade'" if ARGV.include?("--all")
if ARGV.named.empty?
outdated = Formula.installed.select do |f|
@ -67,7 +67,14 @@ module Homebrew
oh1 "No packages to upgrade"
else
oh1 "Upgrading #{Formatter.pluralize(formulae_to_install.length, "outdated package")}, with result:"
puts formulae_to_install.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", "
formulae_upgrades = formulae_to_install.map do |f|
if f.optlinked?
"#{f.full_specified_name} #{Keg.new(f.opt_prefix).version} -> #{f.pkg_version}"
else
"#{f.full_specified_name} #{f.pkg_version}"
end
end
puts formulae_upgrades.join(", ")
end
# Sort keg_only before non-keg_only formulae to avoid any needless conflicts

View File

@ -54,48 +54,19 @@ module Homebrew
used_formulae.all? do |ff|
begin
deps = f.runtime_dependencies if only_installed_arg
if recursive
deps ||= recursive_includes(Dependency, f, includes, ignores)
dep_formulae = deps.flat_map do |dep|
begin
dep.to_formula
rescue
[]
end
end
reqs_by_formula = ([f] + dep_formulae).flat_map do |formula|
formula.requirements.map { |req| [formula, req] }
end
reqs_by_formula.reject! do |dependent, req|
if req.recommended?
ignores.include?("recommended?") || dependent.build.without?(req)
elsif req.test?
!includes.include?("test?")
elsif req.optional?
!includes.include?("optional?") && !dependent.build.with?(req)
elsif req.build?
!includes.include?("build?")
end
end
reqs = reqs_by_formula.map(&:last)
deps ||= if recursive
recursive_includes(Dependency, f, includes, ignores)
else
deps ||= reject_ignores(f.deps, ignores, includes)
reqs = reject_ignores(f.requirements, ignores, includes)
reject_ignores(f.deps, ignores, includes)
end
next true if deps.any? do |dep|
deps.any? do |dep|
begin
dep.to_formula.full_name == ff.full_name
rescue
dep.name == ff.name
end
end
reqs.any? { |req| req.name == ff.name }
rescue FormulaUnavailableError
# Silently ignore this case as we don't care about things used in
# taps that aren't currently tapped.

View File

@ -47,7 +47,15 @@ fetch() {
local sha
local temporary_path
curl_args=(
curl_args=()
# do not load .curlrc unless requested (must be the first argument)
if [[ -z "$HOMEBREW_CURLRC" ]]
then
curl_args[${#curl_args[*]}]="-q"
fi
curl_args+=(
--fail
--remote-time
--location

View File

@ -1,32 +1,11 @@
require "compat/fails_with_llvm"
require "compat/tap"
require "compat/hbc"
require "compat/formula"
require "compat/formula_specialties"
require "compat/formula_support"
require "compat/global"
require "compat/hardware"
require "compat/macos"
require "compat/md5"
require "compat/sha1"
require "compat/requirements"
require "compat/version"
require "compat/download_strategy"
require "compat/keg"
require "compat/pathname"
require "compat/dependency_collector"
require "compat/language/haskell"
require "compat/xcode"
require "compat/software_spec"
require "compat/utils"
require "compat/json"
require "compat/ARGV"
require "compat/build_options"
require "compat/tab"
require "compat/ENV/shared"
require "compat/ENV/std"
require "compat/ENV/super"
require "compat/utils/shell"
require "compat/extend/string"
require "compat/gpg"
require "compat/dependable"
require "compat/os/mac"

View File

@ -1,5 +0,0 @@
module HomebrewArgvExtension
def build_32_bit?
odisabled "ARGV.build_32_bit?"
end
end

View File

@ -1,10 +1,9 @@
module SharedEnvExtension
def j1
odeprecated "ENV.j1", "ENV.deparallelize"
deparallelize
odisabled "ENV.j1", "ENV.deparallelize"
end
def java_cache
odeprecated "ENV.java_cache"
odisabled "ENV.java_cache"
end
end

View File

@ -1,25 +0,0 @@
module Stdenv
def fast
odisabled "ENV.fast"
end
def O4
odisabled "ENV.O4"
end
def Og
odisabled "ENV.Og"
end
def gcc_4_0_1
odisabled "ENV.gcc_4_0_1", "ENV.gcc_4_0"
end
def gcc
odisabled "ENV.gcc", "ENV.gcc_4_2"
end
def libpng
odisabled "ENV.libpng", "ENV.x11"
end
end

View File

@ -1,45 +0,0 @@
module Superenv
def fast
odisabled "ENV.fast"
end
def O4
odisabled "ENV.O4"
end
def Og
odisabled "ENV.Og"
end
def gcc_4_0_1
odisabled "ENV.gcc_4_0_1", "ENV.gcc_4_0"
end
def gcc
odisabled "ENV.gcc", "ENV.gcc_4_2"
end
def libxml2
odisabled "ENV.libxml2"
end
def minimal_optimization
odisabled "ENV.minimal_optimization"
end
def no_optimization
odisabled "ENV.no_optimization"
end
def enable_warnings
odisabled "ENV.enable_warnings"
end
def macosxsdk
odisabled "ENV.macosxsdk"
end
def remove_macosxsdk
odisabled "ENV.remove_macosxsdk"
end
end

View File

@ -1,9 +0,0 @@
class BuildOptions
def build_32_bit?
odisabled "build.build_32_bit?"
end
def build_bottle?
odisabled "build.build_bottle?", "build.bottle?"
end
end

View File

@ -1,5 +1,6 @@
module Dependable
def run?
odeprecated "Dependable#run?"
tags.include? :run
end
end

View File

@ -9,56 +9,42 @@ class DependencyCollector
def parse_string_spec(spec, tags)
if (tag = tags.first) && LANGUAGE_MODULES.include?(tag)
odeprecated "'depends_on ... => #{tag.inspect}'"
LanguageModuleRequirement.new(tag, spec, tags[1])
else
super
odisabled "'depends_on ... => #{tag.inspect}'"
end
if tags.include?(:run)
odeprecated "'depends_on ... => :run'"
end
super
end
def parse_symbol_spec(spec, tags)
case spec
when :clt
odeprecated "'depends_on :clt'"
odisabled "'depends_on :clt'"
when :tex
odeprecated "'depends_on :tex'"
TeXRequirement.new(tags)
when :autoconf, :automake, :bsdmake, :libtool
output_deprecation(spec)
autotools_dep(spec, tags)
when :cairo, :fontconfig, :freetype, :libpng, :pixman
output_deprecation(spec)
Dependency.new(spec.to_s, tags)
when :ant, :expat
output_deprecation(spec)
Dependency.new(spec.to_s, tags)
odisabled "'depends_on :tex'"
when :libltdl
output_deprecation("libtool")
Dependency.new("libtool", tags)
output_disabled(spec, "libtool")
when :apr
output_deprecation(spec, "apr-util")
Dependency.new("apr-util", tags)
output_disabled(spec, "apr-util")
when :fortran
output_deprecation(spec, "gcc")
Dependency.new("gcc", tags)
output_disabled(spec, "gcc")
when :gpg
output_deprecation(spec, "gnupg")
Dependency.new("gnupg", tags)
output_disabled(spec, "gnupg")
when :hg
output_deprecation(spec, "mercurial")
Dependency.new("mercurial", tags)
output_disabled(spec, "mercurial")
when :mpi
output_deprecation(spec, "open-mpi")
Dependency.new("open-mpi", tags)
output_disabled(spec, "open-mpi")
when :python, :python2
output_deprecation(spec, "python@2")
Dependency.new("python@2", tags)
output_disabled(spec, "python@2")
when :python3
output_deprecation(spec, "python")
Dependency.new("python", tags)
when :emacs, :mysql, :perl, :postgresql, :rbenv, :ruby
output_deprecation(spec)
Dependency.new(spec.to_s, tags)
output_disabled(spec, "python")
when :ant, :autoconf, :automake, :bsdmake, :cairo, :emacs, :expat,
:fontconfig, :freetype, :libtool, :libpng, :mysql, :perl, :pixman,
:postgresql, :rbenv, :ruby
output_disabled(spec)
else
super
end
@ -66,14 +52,9 @@ class DependencyCollector
private
def autotools_dep(spec, tags)
tags << :build
Dependency.new(spec.to_s, tags)
end
def output_deprecation(dependency, new_dependency = dependency)
odeprecated "'depends_on :#{dependency}'",
"'depends_on \"#{new_dependency}\"'"
def output_disabled(dependency, new_dependency = dependency)
odisabled "'depends_on :#{dependency}'",
"'depends_on \"#{new_dependency}\"'"
end
end

View File

@ -1,7 +1,7 @@
class String
def undent
odeprecated "<<-EOS.undent", "<<~EOS"
gsub(/^[ \t]{#{(slice(/^[ \t]+/) || '').length}}/, "")
odisabled "<<-EOS.undent", "<<~EOS"
self
end
alias unindent undent

View File

@ -1,9 +0,0 @@
class Formula
def fails_with_llvm(_msg = nil, _data = nil)
odisabled "Formula#fails_with_llvm in install"
end
def self.fails_with_llvm(_msg = nil, _data = {})
odisabled "Formula.fails_with_llvm"
end
end

View File

@ -1,74 +1,5 @@
module FormulaCompat
def x11_installed?
odisabled "Formula#x11_installed?", "MacOS::X11.installed?"
end
def snow_leopard_64?
odisabled "Formula#snow_leopard_64?", "MacOS.prefer_64_bit?"
end
end
class Formula
include FormulaCompat
extend FormulaCompat
def std_cmake_parameters
odisabled "Formula#std_cmake_parameters", "Formula#std_cmake_args"
end
def cxxstdlib_check(_)
odisabled "Formula#cxxstdlib_check in install",
"Formula.cxxstdlib_check outside install"
end
def self.bottle_sha1(*)
odisabled "Formula.bottle_sha1"
end
def self.all
odisabled "Formula.all", "Formula.map"
end
def self.canonical_name(_)
odisabled "Formula.canonical_name", "Formulary.canonical_name"
end
def self.class_s(_)
odisabled "Formula.class_s", "Formulary.class_s"
end
def self.factory(_)
odisabled "Formula.factory", "Formulary.factory"
end
def self.require_universal_deps
odisabled "Formula.require_universal_deps"
end
def self.path(_)
odisabled "Formula.path", "Formulary.core_path"
end
DATA = :DATA
def patches
# Don't print deprecation warning because this method is inherited
# when used.
{}
end
def python(_options = {}, &_)
odisabled "Formula#python"
end
alias python2 python
alias python3 python
def startup_plist
odisabled "Formula#startup_plist", "Formula#plist"
end
def rake(*args)
odeprecated "FileUtils#rake", "system \"rake\""
system "rake", *args
def rake(*)
odisabled "FileUtils#rake", "system \"rake\""
end
end

View File

@ -1,23 +0,0 @@
class ScriptFileFormula < Formula
def install
odisabled "ScriptFileFormula#install", "Formula#install"
end
end
class GithubGistFormula < ScriptFileFormula
def self.url(_val)
odisabled "GithubGistFormula.url", "Formula.url"
end
end
class AmazonWebServicesFormula < Formula
def install
odisabled "AmazonWebServicesFormula#install", "Formula#install"
end
alias standard_install install
# Use this method to generate standard caveats.
def standard_instructions(_, _)
odisabled "AmazonWebServicesFormula#standard_instructions", "Formula#caveats"
end
end

View File

@ -2,17 +2,80 @@ require "formula_support"
class KegOnlyReason
module Compat
def valid?
case @reason
when :provided_by_osx
odisabled "keg_only :provided_by_osx", "keg_only :provided_by_macos"
when :shadowed_by_osx
odisabled "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos"
when :provided_pre_mountain_lion
odeprecated "keg_only :provided_pre_mountain_lion"
MacOS.version < :mountain_lion
when :provided_pre_mavericks
odeprecated "keg_only :provided_pre_mavericks"
MacOS.version < :mavericks
when :provided_pre_el_capitan
odeprecated "keg_only :provided_pre_el_capitan"
MacOS.version < :el_capitan
when :provided_pre_high_sierra
odeprecated "keg_only :provided_pre_high_sierra"
MacOS.version < :high_sierra
when :provided_until_xcode43
odeprecated "keg_only :provided_until_xcode43"
MacOS::Xcode.version < "4.3"
when :provided_until_xcode5
odeprecated "keg_only :provided_until_xcode5"
MacOS::Xcode.version < "5.0"
else
super
end
end
def to_s
case @reason
when :provided_by_osx
odeprecated "keg_only :provided_by_osx", "keg_only :provided_by_macos"
@reason = :provided_by_macos
odisabled "keg_only :provided_by_osx", "keg_only :provided_by_macos"
when :shadowed_by_osx
odeprecated "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos"
@reason = :shadowed_by_macos
end
odisabled "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos"
when :provided_pre_mountain_lion
odeprecated "keg_only :provided_pre_mountain_lion"
super
<<~EOS
macOS already provides this software in versions before Mountain Lion
EOS
when :provided_pre_mavericks
odeprecated "keg_only :provided_pre_mavericks"
<<~EOS
macOS already provides this software in versions before Mavericks
EOS
when :provided_pre_el_capitan
odeprecated "keg_only :provided_pre_el_capitan"
<<~EOS
macOS already provides this software in versions before El Capitan
EOS
when :provided_pre_high_sierra
odeprecated "keg_only :provided_pre_high_sierra"
<<~EOS
macOS already provides this software in versions before High Sierra
EOS
when :provided_until_xcode43
odeprecated "keg_only :provided_until_xcode43"
<<~EOS
Xcode provides this software prior to version 4.3
EOS
when :provided_until_xcode5
odeprecated "keg_only :provided_until_xcode5"
<<~EOS
Xcode provides this software prior to version 5
EOS
else
super
end.to_s.strip
end
end

View File

@ -1,15 +0,0 @@
module Homebrew
module_function
def method_missing(method, *args, &block)
if instance_methods.include?(method)
odisabled "#{self}##{method}", "'module_function' or 'def self.#{method}' to convert it to a class method"
end
super
end
def respond_to_missing?(method, include_private = false)
return true if method_defined?(method)
super(method, include_private)
end
end

View File

@ -1,27 +1,24 @@
require "utils"
module Gpg
module_function
def executable
odeprecated "Gpg.executable", 'which "gpg"'
which "gpg"
odisabled "Gpg.executable", 'which "gpg"'
end
def available?
odeprecated "Gpg.available?", 'which "gpg"'
File.executable?(executable.to_s)
odisabled "Gpg.available?", 'which "gpg"'
end
def create_test_key(_)
odeprecated "Gpg.create_test_key"
odisabled "Gpg.create_test_key"
end
def cleanup_test_processes!
odeprecated "Gpg.cleanup_test_processes!"
odisabled "Gpg.cleanup_test_processes!"
end
def test(_)
odeprecated "Gpg.test"
odisabled "Gpg.test"
end
end

View File

@ -1,35 +0,0 @@
module Hardware
class << self
def is_32_bit?
odisabled "Hardware.is_32_bit?", "Hardware::CPU.is_32_bit?"
end
def is_64_bit?
odisabled "Hardware.is_64_bit?", "Hardware::CPU.is_64_bit?"
end
def bits
odisabled "Hardware.bits", "Hardware::CPU.bits"
end
def cpu_type
odisabled "Hardware.cpu_type", "Hardware::CPU.type"
end
def cpu_family
odisabled "Hardware.cpu_family", "Hardware::CPU.family"
end
def intel_family
odisabled "Hardware.intel_family", "Hardware::CPU.family"
end
def ppc_family
odisabled "Hardware.ppc_family", "Hardware::CPU.family"
end
def processor_count
odisabled "Hardware.processor_count", "Hardware::CPU.cores"
end
end
end

View File

@ -1,19 +0,0 @@
require "json"
module Utils
module JSON
module_function
def load(_)
odisabled "Utils::JSON.load", "JSON.parse"
end
def dump(_)
odisabled "Utils::JSON.dump", "JSON.generate"
end
def stringify_keys(_)
odisabled "Utils::JSON.stringify_keys"
end
end
end

View File

@ -1,5 +0,0 @@
class Keg
def fname
odisabled "Keg#fname", "Keg#name"
end
end

View File

@ -1,9 +0,0 @@
module Language
module Haskell
module Cabal
def cabal_clean_lib
odisabled "Language::Haskell::Cabal#cabal_clean_lib"
end
end
end
end

View File

@ -1,124 +0,0 @@
require "development_tools"
if OS.mac?
MACOS_FULL_VERSION = OS::Mac.full_version.to_s.freeze
MACOS_VERSION = OS::Mac.version.to_s.freeze
end
module OS
module Mac
module_function
def xcode_folder
odisabled "MacOS.xcode_folder", "MacOS::Xcode.folder"
end
def xcode_prefix
odisabled "MacOS.xcode_prefix", "MacOS::Xcode.prefix"
end
def xcode_installed?
odisabled "MacOS.xcode_installed?", "MacOS::Xcode.installed?"
end
def xcode_version
odisabled "MacOS.xcode_version", "MacOS::Xcode.version"
end
def clt_installed?
odisabled "MacOS.clt_installed?", "MacOS::CLT.installed?"
end
def clt_version?
odisabled "MacOS.clt_version?", "MacOS::CLT.version"
end
def x11_installed?
odisabled "MacOS.x11_installed?", "MacOS::X11.installed?"
end
def x11_prefix
odisabled "MacOS.x11_prefix", "MacOS::X11.prefix"
end
def leopard?
odisabled "MacOS.leopard?", "'MacOS.version == :leopard'"
end
def snow_leopard?
odisabled "MacOS.snow_leopard?", "'MacOS.version >= :snow_leopard'"
end
def snow_leopard_or_newer?
odisabled "MacOS.snow_leopard_or_newer?", "'MacOS.version >= :snow_leopard'"
end
def lion?
odisabled "MacOS.lion?", "'MacOS.version >= :lion'"
end
def lion_or_newer?
odisabled "MacOS.lion_or_newer?", "'MacOS.version >= :lion'"
end
def mountain_lion?
odisabled "MacOS.mountain_lion?", "'MacOS.version >= :mountain_lion'"
end
def mountain_lion_or_newer?
odisabled "MacOS.mountain_lion_or_newer?", "'MacOS.version >= :mountain_lion'"
end
def macports_or_fink_installed?
odisabled "MacOS.macports_or_fink_installed?", "!MacOS.macports_or_fink.empty?"
end
def locate(_)
odisabled "MacOS.locate", "DevelopmentTools.locate"
end
def default_cc
odisabled "MacOS.default_cc", "DevelopmentTools.default_cc"
end
def default_compiler
odisabled "MacOS.default_compiler", "DevelopmentTools.default_compiler"
end
def gcc_40_build_version
odisabled "MacOS.gcc_40_build_version", "DevelopmentTools.gcc_4_0_build_version"
end
def gcc_4_0_build_version
odisabled "MacOS.gcc_4_0_build_version", "DevelopmentTools.gcc_4_0_build_version"
end
def gcc_42_build_version
odisabled "MacOS.gcc_42_build_version", "DevelopmentTools.gcc_4_2_build_version"
end
def gcc_build_version
odisabled "MacOS.gcc_build_version", "DevelopmentTools.gcc_4_2_build_version"
end
def llvm_build_version
odisabled "MacOS.llvm_build_version"
end
def clang_version
odisabled "MacOS.clang_version", "DevelopmentTools.clang_version"
end
def clang_build_version
odisabled "MacOS.clang_build_version", "DevelopmentTools.clang_build_version"
end
def has_apple_developer_tools?
odisabled "MacOS.has_apple_developer_tools?", "DevelopmentTools.installed?"
end
def release
odisabled "MacOS.release", "MacOS.version"
end
end
end

View File

@ -1,23 +0,0 @@
class Formula
def self.md5(_val)
odisabled "Formula.md5", "Formula.sha256"
end
end
class SoftwareSpec
def md5(_val)
odisabled "SoftwareSpec#md5", "SoftwareSpec#sha256"
end
end
class Resource
def md5(_val)
odisabled "Resource#md5", "Resource#sha256"
end
end
class Pathname
def md5
odisabled "Pathname#md5", "Pathname#sha256"
end
end

View File

@ -0,0 +1,10 @@
module OS
module Mac
class << self
def release
odeprecated "MacOS.release", "MacOS.version"
version
end
end
end
end

View File

@ -1,9 +0,0 @@
class Pathname
def cp(_)
odisabled "Pathname#cp", "FileUtils.cp"
end
def chmod_R(_)
odisabled "Pathname#chmod_R", "FileUtils.chmod_R"
end
end

View File

@ -1,123 +1,107 @@
require "requirements"
require "compat/requirements/language_module_requirement"
class CVSRequirement < Requirement
fatal true
satisfy do
odeprecated("CVSRequirement", "'depends_on \"cvs\"'")
which "cvs"
odisabled("CVSRequirement", "'depends_on \"cvs\"'")
end
end
class EmacsRequirement < Requirement
fatal true
satisfy do
odeprecated("EmacsRequirement", "'depends_on \"emacs\"'")
which "emacs"
odisabled("EmacsRequirement", "'depends_on \"emacs\"'")
end
end
class FortranRequirement < Requirement
fatal true
satisfy do
odeprecated("FortranRequirement", "'depends_on \"gcc\"'")
which "gfortran"
odisabled("FortranRequirement", "'depends_on \"gcc\"'")
end
end
class GitRequirement < Requirement
fatal true
satisfy do
odeprecated("GitRequirement", "'depends_on \"git\"'")
which "git"
odisabled("GitRequirement", "'depends_on \"git\"'")
end
end
class GPG2Requirement < Requirement
fatal true
satisfy do
odeprecated("GPG2Requirement", "'depends_on \"gnupg\"'")
which "gpg"
odisabled("GPG2Requirement", "'depends_on \"gnupg\"'")
end
end
class MercurialRequirement < Requirement
fatal true
satisfy do
odeprecated("MercurialRequirement", "'depends_on \"mercurial\"'")
which "hg"
odisabled("MercurialRequirement", "'depends_on \"mercurial\"'")
end
end
class MPIRequirement < Requirement
fatal true
satisfy do
odeprecated("MPIRequirement", "'depends_on \"open-mpi\"'")
which "mpicc"
odisabled("MPIRequirement", "'depends_on \"open-mpi\"'")
end
end
class MysqlRequirement < Requirement
fatal true
satisfy do
odeprecated("MysqlRequirement", "'depends_on \"mysql\"'")
which "mysql_config"
odisabled("MysqlRequirement", "'depends_on \"mysql\"'")
end
end
class PerlRequirement < Requirement
fatal true
satisfy do
odeprecated("PerlRequirement", "'depends_on \"perl\"'")
which "perl"
odisabled("PerlRequirement", "'depends_on \"perl\"'")
end
end
class PostgresqlRequirement < Requirement
fatal true
satisfy do
odeprecated("PostgresqlRequirement", "'depends_on \"postgresql\"'")
which "pg_config"
odisabled("PostgresqlRequirement", "'depends_on \"postgresql\"'")
end
end
class PythonRequirement < Requirement
fatal true
satisfy do
odeprecated("PythonRequirement", "'depends_on \"python@2\"'")
which "python2"
odisabled("PythonRequirement", "'depends_on \"python@2\"'")
end
end
class Python3Requirement < Requirement
fatal true
satisfy do
odeprecated("Python3Requirement", "'depends_on \"python\"'")
which "python"
odisabled("Python3Requirement", "'depends_on \"python\"'")
end
end
class RbenvRequirement < Requirement
fatal true
satisfy do
odeprecated("RbenvRequirement", "'depends_on \"rbenv\"'")
which "rbenv"
odisabled("RbenvRequirement", "'depends_on \"rbenv\"'")
end
end
class RubyRequirement < Requirement
fatal true
satisfy do
odeprecated("RubyRequirement", "'depends_on \"ruby\"'")
which "ruby"
odisabled("RubyRequirement", "'depends_on \"ruby\"'")
end
end
class SubversionRequirement < Requirement
fatal true
satisfy do
odeprecated("SubversionRequirement", "'depends_on \"subversion\"'")
which "svn"
odisabled("SubversionRequirement", "'depends_on \"subversion\"'")
end
end
@ -126,8 +110,7 @@ class TeXRequirement < Requirement
cask "mactex"
download "https://www.tug.org/mactex/"
satisfy do
odeprecated("TeXRequirement")
which("tex") || which("latex")
odisabled("TeXRequirement")
end
end

View File

@ -1,63 +0,0 @@
require "requirement"
class LanguageModuleRequirement < Requirement
fatal true
def initialize(language, module_name, import_name = nil)
@language = language
@module_name = module_name
@import_name = import_name || module_name
super([language, module_name, import_name])
end
satisfy(build_env: false) { quiet_system(*the_test) }
def message
s = <<~EOS
Unsatisfied dependency: #{@module_name}
Homebrew does not provide special #{@language.to_s.capitalize} dependencies; install with:
`#{command_line} #{@module_name}`
EOS
unless [:python, :perl, :ruby].include? @language
s += <<~EOS
You may need to: `brew install #{@language}`
EOS
end
s
end
def the_test
case @language
when :lua
["/usr/bin/env", "luarocks-5.2", "show", @import_name.to_s]
when :lua51
["/usr/bin/env", "luarocks-5.1", "show", @import_name.to_s]
when :perl
["/usr/bin/env", "perl", "-e", "use #{@import_name}"]
when :python
["/usr/bin/env", "python2", "-c", "import #{@import_name}"]
when :python3
["/usr/bin/env", "python", "-c", "import #{@import_name}"]
when :ruby
["/usr/bin/env", "ruby", "-rubygems", "-e", "require '#{@import_name}'"]
end
end
def command_line
case @language
when :lua then "luarocks-5.2 install"
when :lua51 then "luarocks-5.1 install"
when :perl then "cpan -i"
when :python then "pip3 install"
when :python3 then "pip install"
when :ruby then "gem install"
end
end
def display_s
"#{@module_name} (#{@language} module)"
end
end

View File

@ -1,29 +0,0 @@
class Formula
def self.sha1(_val)
odisabled "Formula.sha1", "Formula.sha256"
end
end
class SoftwareSpec
def sha1(_val)
odisabled "SoftwareSpec#sha1", "SoftwareSpec#sha256"
end
end
class Resource
def sha1(_val)
odisabled "Resource#sha1", "Resource#sha256"
end
end
class BottleSpecification
def sha1(_val)
odisabled "BottleSpecification#sha1", "BottleSpecification#sha256"
end
end
class Pathname
def sha1
odisabled "Pathname#sha1", "Pathname#sha256"
end
end

View File

@ -1,5 +0,0 @@
class BottleSpecification
def revision(*)
odisabled "BottleSpecification.revision", "BottleSpecification.rebuild"
end
end

View File

@ -1,5 +0,0 @@
class Tab < OpenStruct
def build_32_bit?
odisabled "Tab.build_32_bit?"
end
end

View File

@ -1,7 +0,0 @@
require "tap"
class Tap
def core_formula_repository?
odisabled "Tap#core_formula_repository?", "Tap#core_tap?"
end
end

View File

@ -1,15 +0,0 @@
module Tty
module_function
def white
odisabled "Tty.white", "Tty.reset.bold"
end
end
def puts_columns(_)
odisabled "puts_columns", "puts Formatter.columns"
end
def plural(_, _)
odisabled "#plural", "Formatter.pluralize"
end

View File

@ -1,7 +0,0 @@
module Utils
module Shell
def self.shell_profile
odisabled "Utils::Shell.shell_profile", "Utils::Shell.profile"
end
end
end

View File

@ -1,5 +0,0 @@
class Version
def slice(*)
odisabled "Version#slice", "Version#to_s.slice"
end
end

View File

@ -1,11 +0,0 @@
module OS
module Mac
module Xcode
module_function
def provides_autotools?
odisabled "OS::Mac::Xcode.provides_autotools?"
end
end
end
end

View File

@ -2,8 +2,6 @@ unless ENV["HOMEBREW_BREW_FILE"]
raise "HOMEBREW_BREW_FILE was not exported! Please call bin/brew directly!"
end
require "constants"
# Path to `bin/brew` main executable in HOMEBREW_PREFIX
HOMEBREW_BREW_FILE = Pathname.new(ENV["HOMEBREW_BREW_FILE"])

View File

@ -1,5 +1,5 @@
# frozen_string_literal: true
# RuboCop version used for `brew style` and `brew cask style`
HOMEBREW_RUBOCOP_VERSION = "0.54.0"
HOMEBREW_RUBOCOP_CASK_VERSION = "~> 0.18.0" # has to be updated when RuboCop version changes
HOMEBREW_RUBOCOP_VERSION = "0.55.0"
HOMEBREW_RUBOCOP_CASK_VERSION = "~> 0.19.0" # has to be updated when RuboCop version changes

View File

@ -2,7 +2,6 @@ require "dependency"
require "dependencies"
require "requirement"
require "requirements"
require "set"
require "extend/cachable"
## A dependency is a formula that another formula needs to install.

View File

@ -1,4 +1,3 @@
require "set"
require "formula"
require "formula_versions"

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
#: * `bottle` [`--verbose`] [`--no-rebuild`|`--keep-old`] [`--skip-relocation`] [`--root-url=`<URL>] [`--force-core-tap`] <formulae>:
#: * `bottle` [`--verbose`] [`--no-rebuild`|`--keep-old`] [`--skip-relocation`] [`--or-later`] [`--root-url=`<URL>] [`--force-core-tap`] <formulae>:
#: Generate a bottle (binary package) from a formula installed with
#: `--build-bottle`.
#:
@ -15,6 +15,8 @@
#: If `--root-url` is passed, use the specified <URL> as the root of the
#: bottle's URL instead of Homebrew's default.
#:
#: If `--or-later` is passed, append _or_later to the bottle tag.
#:
#: If `--force-core-tap` is passed, build a bottle even if <formula> is not
#: in homebrew/core or any installed taps.
#:
@ -37,7 +39,6 @@ require "formula_versions"
require "cli_parser"
require "utils/inreplace"
require "erb"
require "extend/pathname"
BOTTLE_ERB = <<-EOS.freeze
bottle do
@ -58,7 +59,7 @@ BOTTLE_ERB = <<-EOS.freeze
<% checksums.each do |checksum_type, checksum_values| %>
<% checksum_values.each do |checksum_value| %>
<% checksum, macos = checksum_value.shift %>
<%= checksum_type %> "<%= checksum %>" => :<%= macos %>
<%= checksum_type %> "<%= checksum %>" => :<%= macos %><%= "_or_later" if Homebrew.args.or_later? %>
<% end %>
<% end %>
end
@ -79,7 +80,9 @@ module Homebrew
switch "--write"
switch "--no-commit"
switch "--json"
switch "--or-later"
switch :verbose
switch :debug
flag "--root-url"
end
@ -114,7 +117,7 @@ module Homebrew
linked_libraries = Keg.file_linked_libraries(file, string)
result ||= !linked_libraries.empty?
if @args.verbose?
if Homebrew.args.verbose?
print_filename.call(string, file) unless linked_libraries.empty?
linked_libraries.each do |lib|
puts " #{Tty.bold}-->#{Tty.reset} links to #{lib}"
@ -137,7 +140,7 @@ module Homebrew
end
end
next unless @args.verbose? && !text_matches.empty?
next unless Homebrew.args.verbose? && !text_matches.empty?
print_filename.call(string, file)
text_matches.first(MAXIMUM_STRING_MATCHES).each do |match, offset|
puts " #{Tty.bold}-->#{Tty.reset} match '#{match}' at offset #{Tty.bold}0x#{offset}#{Tty.reset}"
@ -158,7 +161,7 @@ module Homebrew
absolute_symlinks_start_with_string << pn if link.to_s.start_with?(string)
end
if @args.verbose?
if Homebrew.args.verbose?
unless absolute_symlinks_start_with_string.empty?
opoo "Absolute symlink starting with #{string}:"
absolute_symlinks_start_with_string.each do |pn|
@ -299,7 +302,7 @@ module Homebrew
end
skip_relocation = relocatable && !keg.require_relocation?
end
puts if !relocatable && @args.verbose?
puts if !relocatable && Homebrew.args.verbose?
rescue Interrupt
ignore_interrupts { bottle_path.unlink if bottle_path.exist? }
raise
@ -360,6 +363,8 @@ module Homebrew
puts output
return unless @args.json?
tag = Utils::Bottles.tag.to_s
tag += "_or_later" if @args.or_later?
json = {
f.full_name => {
"formula" => {
@ -372,7 +377,7 @@ module Homebrew
"cellar" => bottle.cellar.to_s,
"rebuild" => bottle.rebuild,
"tags" => {
Utils::Bottles.tag.to_s => {
tag => {
"filename" => filename.to_s,
"sha256" => sha256,
},

Some files were not shown because too many files have changed in this diff Show More