Merge pull request #3319 from reitermarkus/squiggly-heredocs

Use “squiggly” heredocs.
This commit is contained in:
Mike McQuaid 2017-10-20 14:10:50 +01:00 committed by GitHub
commit 76cd7c7949
149 changed files with 716 additions and 757 deletions

View File

@ -29,7 +29,7 @@ Layout/IndentArray:
EnforcedStyle: special_inside_parentheses
Layout/IndentHeredoc:
EnforcedStyle: unindent
EnforcedStyle: squiggly
# conflicts with DSL-style path concatenation with `/`
Layout/SpaceAroundOperators:

View File

@ -253,7 +253,7 @@ module Hbc
end
def trash_paths(*paths, command: nil, **_)
result = command.run!("/usr/bin/osascript", args: ["-e", <<-'EOS'.undent, *paths])
result = command.run!("/usr/bin/osascript", args: ["-e", <<~'EOS', *paths])
on run argv
repeat with i from 1 to (count argv)
set item i of argv to (item i of argv as POSIX file)

View File

@ -10,7 +10,7 @@ module Hbc
module ManualInstaller
def install_phase(**)
puts <<-EOS.undent
puts <<~EOS
To complete the installation of Cask #{cask}, you must also
run the installer at

View File

@ -174,7 +174,7 @@ module Hbc
add_warning "error retrieving appcast: #{result[:command_result].stderr}"
else
expected = cask.appcast.checkpoint
add_warning <<-EOS.undent unless expected == actual_checkpoint
add_warning <<~EOS unless expected == actual_checkpoint
appcast checkpoint mismatch
Expected: #{expected}
Actual: #{actual_checkpoint}

View File

@ -190,7 +190,7 @@ module Hbc
when 2..Float::INFINITY
loaders = possible_tap_casks.map(&FromTapPathLoader.method(:new))
raise CaskError, <<-EOS.undent
raise CaskError, <<~EOS
Cask #{ref} exists in multiple taps:
#{loaders.map { |loader| " #{loader.tap}/#{loader.token}" }.join("\n")}
EOS

View File

@ -235,7 +235,7 @@ module Hbc
end
def purpose
puts <<-EOS.undent
puts <<~EOS
brew-cask provides a friendly homebrew-style CLI workflow for the
administration of macOS applications distributed as binaries.

View File

@ -21,7 +21,7 @@ module Hbc
end
def self.template(cask_token)
<<-EOS.undent
<<~EOS
cask '#{cask_token}' do
version ''
sha256 ''

View File

@ -16,7 +16,7 @@ module Hbc
super
if args.count != 1
raise ArgumentError, <<-EOS.undent
raise ArgumentError, <<~EOS
This command requires exactly one argument.
#{self.class.usage}
@ -31,7 +31,7 @@ module Hbc
end
def self.usage
<<-EOS.undent
<<~EOS
Usage: brew cask _audit_modified_casks [options...] <commit range>
Given a range of Git commits, find any Casks that were modified and run `brew

View File

@ -25,7 +25,7 @@ module Hbc
single = versions.count == 1
puts <<-EOS.undent
puts <<~EOS
#{cask} #{versions.join(", ")} #{single ? "is" : "are"} still installed.
Remove #{single ? "it" : "them all"} with `brew cask uninstall --force #{cask}`.
EOS

View File

@ -13,7 +13,7 @@ module Hbc
def self.installer_cmd
return @installer_cmd ||= INSTALLER_PATHNAME if installer_exist?
raise CaskError, <<-EOS.undent
raise CaskError, <<~EOS
Adobe AIR runtime not present, try installing it via
brew cask install adobe-air

View File

@ -9,22 +9,22 @@ module Hbc
class DSL
class Caveats < Base
def path_environment_variable(path)
puts <<-EOS.undent
To use #{@cask}, you may need to add the #{path} directory
to your PATH environment variable, eg (for bash shell):
puts <<~EOS
To use #{@cask}, you may need to add the #{path} directory
to your PATH environment variable, eg (for bash shell):
export PATH=#{path}:"$PATH"
export PATH=#{path}:"$PATH"
EOS
end
def zsh_path_helper(path)
puts <<-EOS.undent
To use #{@cask}, zsh users may need to add the following line to their
~/.zprofile. (Among other effects, #{path} will be added to the
PATH environment variable):
puts <<~EOS
To use #{@cask}, zsh users may need to add the following line to their
~/.zprofile. (Among other effects, #{path} will be added to the
PATH environment variable):
eval `/usr/libexec/path_helper -s`
eval `/usr/libexec/path_helper -s`
EOS
end
@ -32,7 +32,7 @@ module Hbc
def files_in_usr_local
localpath = "/usr/local"
return unless HOMEBREW_PREFIX.to_s.downcase.start_with?(localpath)
puts <<-EOS.undent
puts <<~EOS
Cask #{@cask} installs files under "#{localpath}". The presence of such
files can cause warnings when running "brew doctor", which is considered
to be a bug in Homebrew-Cask.
@ -42,72 +42,72 @@ module Hbc
def depends_on_java(java_version = "any")
if java_version == "any"
puts <<-EOS.undent
#{@cask} requires Java. You can install the latest version with
puts <<~EOS
#{@cask} requires Java. You can install the latest version with
brew cask install java
brew cask install java
EOS
elsif java_version.include?("9") || java_version.include?("+")
puts <<-EOS.undent
#{@cask} requires Java #{java_version}. You can install the latest version with
puts <<~EOS
#{@cask} requires Java #{java_version}. You can install the latest version with
brew cask install java
brew cask install java
EOS
else
puts <<-EOS.undent
#{@cask} requires Java #{java_version}. You can install it with
puts <<~EOS
#{@cask} requires Java #{java_version}. You can install it with
brew cask install caskroom/versions/java#{java_version}
brew cask install caskroom/versions/java#{java_version}
EOS
end
end
def logout
puts <<-EOS.undent
You must log out and log back in for the installation of #{@cask}
to take effect.
puts <<~EOS
You must log out and log back in for the installation of #{@cask}
to take effect.
EOS
end
def reboot
puts <<-EOS.undent
You must reboot for the installation of #{@cask} to take effect.
puts <<~EOS
You must reboot for the installation of #{@cask} to take effect.
EOS
end
def discontinued
puts <<-EOS.undent
#{@cask} has been officially discontinued upstream.
It may stop working correctly (or at all) in recent versions of macOS.
puts <<~EOS
#{@cask} has been officially discontinued upstream.
It may stop working correctly (or at all) in recent versions of macOS.
EOS
end
def free_license(web_page)
puts <<-EOS.undent
The vendor offers a free license for #{@cask} at
#{web_page}
puts <<~EOS
The vendor offers a free license for #{@cask} at
#{web_page}
EOS
end
def malware(radar_number)
puts <<-EOS.undent
#{@cask} has been reported to bundle malware. Like with any app, use at your own risk.
puts <<~EOS
#{@cask} has been reported to bundle malware. Like with any app, use at your own risk.
A report has been made to Apple about this app. Their certificate will hopefully be revoked.
See the public report at
#{Formatter.url("https://openradar.appspot.com/#{radar_number}")}
A report has been made to Apple about this app. Their certificate will hopefully be revoked.
See the public report at
#{Formatter.url("https://openradar.appspot.com/#{radar_number}")}
If this report is accurate, please duplicate it at
#{Formatter.url("https://bugreport.apple.com/")}
If this report is a mistake, please let us know by opening an issue at
#{Formatter.url("https://github.com/caskroom/homebrew-cask/issues/new")}
If this report is accurate, please duplicate it at
#{Formatter.url("https://bugreport.apple.com/")}
If this report is a mistake, please let us know by opening an issue at
#{Formatter.url("https://github.com/caskroom/homebrew-cask/issues/new")}
EOS
end

View File

@ -44,7 +44,7 @@ module Hbc
class CaskAlreadyInstalledError < AbstractCaskErrorWithToken
def to_s
<<-EOS.undent
<<~EOS
Cask '#{token}' is already installed.
To re-install #{token}, run:
@ -80,7 +80,7 @@ module Hbc
class CaskX11DependencyError < AbstractCaskErrorWithToken
def to_s
<<-EOS.undent
<<~EOS
Cask '#{token}' requires XQuartz/X11, which can be installed using Homebrew-Cask by running
#{Formatter.identifier("brew cask install xquartz")}
@ -132,7 +132,7 @@ module Hbc
class CaskSha256MissingError < CaskSha256Error
def to_s
<<-EOS.undent
<<~EOS
Cask '#{token}' requires a checksum:
#{Formatter.identifier("sha256 '#{actual}'")}
EOS
@ -148,7 +148,7 @@ module Hbc
end
def to_s
<<-EOS.undent
<<~EOS
Checksum for Cask '#{token}' does not match.
Expected: #{Formatter.success(expected.to_s)}
@ -162,7 +162,7 @@ module Hbc
class CaskNoShasumError < CaskSha256Error
def to_s
<<-EOS.undent
<<~EOS
Cask '#{token}' does not have a sha256 checksum defined and was not installed.
This means you have the #{Formatter.identifier("--require-sha")} option set, perhaps in your HOMEBREW_CASK_OPTS.
EOS

View File

@ -326,7 +326,7 @@ module Hbc
],
sudo: true)
else
opoo <<-EOS.undent
opoo <<~EOS
Accessibility access cannot be enabled automatically on this version of macOS.
See System Preferences to enable it manually.
EOS
@ -347,7 +347,7 @@ module Hbc
],
sudo: true)
else
opoo <<-EOS.undent
opoo <<~EOS
Accessibility access cannot be disabled automatically on this version of macOS.
See System Preferences to disable it manually.
EOS

View File

@ -166,12 +166,12 @@ module Hbc
_warn_plist_garbage(command, Regexp.last_match[2])
xml = Plist.parse_xml(output)
unless xml.respond_to?(:keys) && !xml.keys.empty?
raise CaskError, <<-EOS
Empty result parsing plist output from command.
command was:
#{command}
output we attempted to parse:
#{output}
raise CaskError, <<~EOS
Empty result parsing plist output from command.
command was:
#{command}
output we attempted to parse:
#{output}
EOS
end
xml

View File

@ -90,7 +90,7 @@ module Hbc
end
def self.error_message_with_suggestions
<<-EOS.undent
<<~EOS
Follow the instructions here:
#{Formatter.url(BUG_REPORTS_URL)}
EOS

View File

@ -1,7 +1,7 @@
module Hbc
def self.full_version
@full_version ||= begin
<<-EOS.undent
<<~EOS
Homebrew-Cask #{HOMEBREW_VERSION}
caskroom/homebrew-cask #{Hbc.default_tap.version_string}
EOS

View File

@ -44,7 +44,7 @@ class Caveats
def keg_only_text
return unless f.keg_only?
s = <<-EOS.undent
s = <<~EOS
This formula is keg-only, which means it was not symlinked into #{HOMEBREW_PREFIX},
because #{f.keg_only_reason.to_s.chomp}.
EOS
@ -86,12 +86,12 @@ class Caveats
case shell
when :bash
<<-EOS.undent
<<~EOS
Bash completion has been installed to:
#{HOMEBREW_PREFIX}/etc/bash_completion.d
EOS
when :zsh
<<-EOS.undent
<<~EOS
zsh #{installed.join(" and ")} have been installed to:
#{HOMEBREW_PREFIX}/share/zsh/site-functions
EOS
@ -111,7 +111,7 @@ class Caveats
homebrew_site_packages = Language::Python.homebrew_site_packages
user_site_packages = Language::Python.user_site_packages "python"
pth_file = user_site_packages/"homebrew.pth"
instructions = <<-EOS.undent.gsub(/^/, " ")
instructions = <<~EOS.gsub(/^/, " ")
mkdir -p #{user_site_packages}
echo 'import site; site.addsitedir("#{homebrew_site_packages}")' >> #{pth_file}
EOS
@ -119,7 +119,7 @@ class Caveats
if f.keg_only?
keg_site_packages = f.opt_prefix/"lib/python2.7/site-packages"
unless Language::Python.in_sys_path?("python", keg_site_packages)
s = <<-EOS.undent
s = <<~EOS
If you need Python to find bindings for this keg-only formula, run:
echo #{keg_site_packages} >> #{homebrew_site_packages/f.name}.pth
EOS
@ -131,7 +131,7 @@ class Caveats
return if Language::Python.reads_brewed_pth_files?("python")
if !Language::Python.in_sys_path?("python", homebrew_site_packages)
s = <<-EOS.undent
s = <<~EOS
Python modules have been installed and Homebrew's site-packages is not
in your Python sys.path, so you will not be able to import the modules
this formula installed. If you plan to develop with these modules,
@ -139,7 +139,7 @@ class Caveats
EOS
s += instructions
elsif keg.python_pth_files_installed?
s = <<-EOS.undent
s = <<~EOS
This formula installed .pth files to Homebrew's site-packages and your
Python isn't configured to process them, so you will not be able to
import the modules this formula installed. If you plan to develop
@ -155,7 +155,7 @@ class Caveats
return unless keg
return unless keg.elisp_installed?
<<-EOS.undent
<<~EOS
Emacs Lisp files have been installed to:
#{HOMEBREW_PREFIX}/share/emacs/site-lisp/#{f.name}
EOS

View File

@ -38,7 +38,7 @@ module Homebrew
end
def report_unremovable_kegs
ofail <<-EOS.undent
ofail <<~EOS
Could not cleanup old kegs! Fix your permissions on:
#{Cleanup.unremovable_kegs.join "\n "}
EOS

View File

@ -43,7 +43,7 @@ module Homebrew
detected_name = basename[/(.*?)-?#{Regexp.escape(version)}/, 1] || basename
canonical_name = Formulary.canonical_name(detected_name)
odie <<-EOS.undent if detected_name != canonical_name
odie <<~EOS if detected_name != canonical_name
The detected name #{detected_name.inspect} exists in Homebrew as an alias
of #{canonical_name.inspect}. Consider using the canonical name instead:
brew diy --name=#{canonical_name}

View File

@ -43,7 +43,7 @@ module Homebrew
out = checks.send(method)
next if out.nil? || out.empty?
if first_warning
$stderr.puts <<-EOS.undent
$stderr.puts <<~EOS
#{Tty.bold}Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!#{Tty.reset}

View File

@ -29,7 +29,7 @@ module Homebrew
files["00.config.out"] = { content: s.string }
files["00.doctor.out"] = { content: `brew doctor 2>&1` }
unless f.core_formula?
tap = <<-EOS.undent
tap = <<~EOS
Formula: #{f.name}
Tap: #{f.tap}
Path: #{f.path}
@ -47,7 +47,7 @@ module Homebrew
if ARGV.include?("--new-issue") || ARGV.switch?("n")
if GitHub.api_credentials_type == :none
puts <<-EOS.undent
puts <<~EOS
You can create a new personal access token:
#{GitHub::ALL_SCOPES_URL}
and then set the new HOMEBREW_GITHUB_API_TOKEN as the authentication method.
@ -64,7 +64,7 @@ module Homebrew
def brief_build_info(f)
build_time_str = f.logs.ctime.strftime("%Y-%m-%d %H:%M:%S")
s = <<-EOS.undent
s = <<~EOS
Homebrew build logs for #{f.full_name} on #{OS_VERSION}
EOS
if ARGV.include?("--with-hostname")

View File

@ -1,4 +1,4 @@
HOMEBREW_HELP = <<-EOS.unindent.freeze
HOMEBREW_HELP = <<~EOS.freeze
Example usage:
brew search [TEXT|/REGEX/]
brew (info|home|options) [FORMULA...]

View File

@ -128,7 +128,7 @@ module Homebrew
"#{c.name}#{reason}"
end.sort!
unless conflicts.empty?
puts <<-EOS.undent
puts <<~EOS
Conflicts with:
#{conflicts.join("\n ")}
EOS

View File

@ -110,17 +110,17 @@ module Homebrew
ARGV.formulae.each do |f|
# head-only without --HEAD is an error
if !ARGV.build_head? && f.stable.nil? && f.devel.nil?
raise <<-EOS.undent
#{f.full_name} is a head-only formula
Install with `brew install --HEAD #{f.full_name}`
raise <<~EOS
#{f.full_name} is a head-only formula
Install with `brew install --HEAD #{f.full_name}`
EOS
end
# devel-only without --devel is an error
if !ARGV.build_devel? && f.stable.nil? && f.head.nil?
raise <<-EOS.undent
#{f.full_name} is a devel-only formula
Install with `brew install --devel #{f.full_name}`
raise <<~EOS
#{f.full_name} is a devel-only formula
Install with `brew install --devel #{f.full_name}`
EOS
end
@ -150,12 +150,12 @@ module Homebrew
# sure --force flag is passed.
if f.outdated?
optlinked_version = Keg.for(f.opt_prefix).version
onoe <<-EOS.undent
onoe <<~EOS
#{f.full_name} #{optlinked_version} is already installed
To upgrade to #{f.version}, run `brew upgrade #{f.name}`
EOS
else
opoo <<-EOS.undent
opoo <<~EOS
#{f.full_name} #{f.pkg_version} is already installed
EOS
end
@ -173,13 +173,13 @@ module Homebrew
msg = "#{f.full_name} #{installed_version} is already installed"
linked_not_equals_installed = f.linked_version != installed_version
if f.linked? && linked_not_equals_installed
msg = <<-EOS.undent
msg = <<~EOS
#{msg}
The currently linked version is #{f.linked_version}
You can use `brew switch #{f} #{installed_version}` to link this version.
EOS
elsif !f.linked? || f.keg_only?
msg = <<-EOS.undent
msg = <<~EOS
#{msg}, it's just not linked.
You can use `brew link #{f}` to link this version.
EOS
@ -188,7 +188,7 @@ module Homebrew
elsif !f.any_version_installed? && old_formula = f.old_installed_formulae.first
msg = "#{old_formula.full_name} #{old_formula.installed_version} already installed"
if !old_formula.linked? && !old_formula.keg_only?
msg = <<-EOS.undent
msg = <<~EOS
#{msg}, it's just not linked.
You can use `brew link #{old_formula.full_name}` to link this version.
EOS
@ -197,7 +197,7 @@ module Homebrew
elsif f.migration_needed? && !ARGV.force?
# Check if the formula we try to install is the same as installed
# but not migrated one. If --force passed then install anyway.
opoo <<-EOS.undent
opoo <<~EOS
#{f.oldname} already installed, it's just not migrated
You can migrate formula with `brew migrate #{f}`
Or you can force install it with `brew install #{f} --force`
@ -283,7 +283,7 @@ module Homebrew
def check_ppc
case Hardware::CPU.type
when :ppc
abort <<-EOS.undent
abort <<~EOS
Sorry, Homebrew does not support your computer's CPU architecture.
For PPC support, see: https://github.com/mistydemeo/tigerbrew
EOS
@ -308,7 +308,7 @@ module Homebrew
def check_cellar
FileUtils.mkdir_p HOMEBREW_CELLAR unless File.exist? HOMEBREW_CELLAR
rescue
raise <<-EOS.undent
raise <<~EOS
Could not create #{HOMEBREW_CELLAR}
Check you have permission to write to #{HOMEBREW_CELLAR.parent}
EOS

View File

@ -29,7 +29,7 @@ module Homebrew
keg_only = keg_only?(keg.rack)
if HOMEBREW_PREFIX.to_s == "/usr/local" && keg_only &&
keg.name.start_with?("openssl", "libressl")
opoo <<-EOS.undent
opoo <<~EOS
Refusing to link: #{keg.name}
Linking keg-only #{keg.name} means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's #{keg.name}.

View File

@ -19,7 +19,7 @@ module Homebrew
module_function
def linkapps
opoo <<-EOS.undent
opoo <<~EOS
`brew linkapps` has been deprecated and will eventually be removed!
Unfortunately `brew linkapps` cannot behave nicely with e.g. Spotlight using

View File

@ -31,7 +31,7 @@ module Homebrew
end
if File.exist? "#{repo}/.git/shallow"
opoo <<-EOS.undent
opoo <<~EOS
#{name} is a shallow clone so only partial output will be shown.
To get a full clone run:
git -C "#{git_cd}" fetch --unshallow

View File

@ -87,7 +87,7 @@ module Homebrew
arg.include?(char) && !arg.start_with?("/")
end
end
ohai <<-EOS.undent
ohai <<~EOS
Did you mean to perform a regular expression search?
Surround your query with /slashes/ to search locally by regex.
EOS

View File

@ -27,14 +27,14 @@ module Homebrew
end
ENV["PS1"] = 'brew \[\033[1;32m\]\w\[\033[0m\]$ '
ENV["VERBOSE"] = "1"
puts <<-EOS.undent_________________________________________________________72
Your shell has been configured to use Homebrew's build environment;
this should help you build stuff. Notably though, the system versions of
gem and pip will ignore our configuration and insist on using the
environment they were built under (mostly). Sadly, scons will also
ignore our configuration.
When done, type `exit'.
EOS
puts <<~EOS
Your shell has been configured to use Homebrew's build environment;
this should help you build stuff. Notably though, the system versions of
gem and pip will ignore our configuration and insist on using the
environment they were built under (mostly). Sadly, scons will also
ignore our configuration.
When done, type `exit'.
EOS
$stdout.flush
exec ENV["SHELL"]
end

View File

@ -131,7 +131,7 @@ module Homebrew
class DeveloperDependentsMessage < DependentsMessage
def output
opoo <<-EOS.undent
opoo <<~EOS
#{list reqs} #{are_required_by_deps}.
You can silence this warning with:
#{sample_command}
@ -141,7 +141,7 @@ module Homebrew
class NondeveloperDependentsMessage < DependentsMessage
def output
ofail <<-EOS.undent
ofail <<~EOS
Refusing to uninstall #{list reqs}
because #{they reqs} #{are_required_by_deps}.
You can override this and force removal with:

View File

@ -20,7 +20,7 @@ module Homebrew
module_function
def unlinkapps
opoo <<-EOS.undent
opoo <<~EOS
`brew unlinkapps` has been deprecated and will eventually be removed!
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.

View File

@ -33,7 +33,7 @@ module Homebrew
# Use an extra newline and bold to avoid this being missed.
ohai "Homebrew has enabled anonymous aggregate user behaviour analytics."
puts <<-EOS.undent
puts <<~EOS
#{Tty.bold}Read the analytics documentation (and how to opt-out) here:
#{Formatter.url("https://docs.brew.sh/Analytics.html")}#{Tty.reset}
@ -167,7 +167,7 @@ module Homebrew
end
if @migration_failed
opoo <<-EOS.undent
opoo <<~EOS
Failed to migrate #{legacy_cache} to
#{HOMEBREW_CACHE}. Please do so manually.
EOS
@ -176,7 +176,7 @@ module Homebrew
FileUtils.rm_rf legacy_cache
if legacy_cache.exist?
FileUtils.touch migration_attempted_file
opoo <<-EOS.undent
opoo <<~EOS
Failed to delete #{legacy_cache}.
Please do so manually.
EOS
@ -191,7 +191,7 @@ module Homebrew
ohai "Migrating HOMEBREW_REPOSITORY (please wait)..."
unless HOMEBREW_PREFIX.writable_real?
ofail <<-EOS.undent
ofail <<~EOS
#{HOMEBREW_PREFIX} is not writable.
You should change the ownership and permissions of #{HOMEBREW_PREFIX}
@ -205,7 +205,7 @@ module Homebrew
new_homebrew_repository = Pathname.new "/usr/local/Homebrew"
new_homebrew_repository.rmdir_if_possible
if new_homebrew_repository.exist?
ofail <<-EOS.undent
ofail <<~EOS
#{new_homebrew_repository} already exists.
Please remove it manually or uninstall and reinstall Homebrew into a new
location as the migration cannot be done automatically.
@ -258,7 +258,7 @@ module Homebrew
end
unless unremovable_paths.empty?
ofail <<-EOS.undent
ofail <<~EOS
Could not remove old HOMEBREW_REPOSITORY paths!
Please do this manually with:
sudo rm -rf #{unremovable_paths.join " "}
@ -274,7 +274,7 @@ module Homebrew
begin
FileUtils.ln_s(src.relative_path_from(dst.parent), dst)
rescue Errno::EACCES, Errno::ENOENT
ofail <<-EOS.undent
ofail <<~EOS
Could not create symlink at #{dst}!
Please do this manually with:
sudo ln -sf #{src} #{dst}
@ -285,13 +285,13 @@ module Homebrew
link_completions_manpages_and_docs(new_homebrew_repository)
ohai "Migrated HOMEBREW_REPOSITORY to #{new_homebrew_repository}!"
puts <<-EOS.undent
puts <<~EOS
Homebrew no longer needs to have ownership of /usr/local. If you wish you can
return /usr/local to its default ownership with:
sudo chown root:wheel #{HOMEBREW_PREFIX}
EOS
rescue => e
ofail <<-EOS.undent
ofail <<~EOS
#{Tty.bold}Failed to migrate HOMEBREW_REPOSITORY to #{new_homebrew_repository}!#{Tty.reset}
The error was:
#{e}
@ -309,7 +309,7 @@ module Homebrew
Utils::Link.link_manpages(repository, command)
Utils::Link.link_docs(repository, command)
rescue => e
ofail <<-EOS.undent
ofail <<~EOS
Failed to link all completions, docs and manpages:
#{e}
EOS
@ -449,7 +449,7 @@ class Reporter
next unless (HOMEBREW_PREFIX/"Caskroom"/new_name).exist?
new_tap = Tap.fetch(new_tap_name)
new_tap.install unless new_tap.installed?
ohai "#{name} has been moved to Homebrew.", <<-EOS.undent
ohai "#{name} has been moved to Homebrew.", <<~EOS
To uninstall the cask run:
brew cask uninstall --force #{name}
EOS
@ -480,14 +480,14 @@ class Reporter
system HOMEBREW_BREW_FILE, "prune"
ohai "brew cask install #{new_name}"
system HOMEBREW_BREW_FILE, "cask", "install", new_name
ohai <<-EOS.undent
ohai <<~EOS
#{name} has been moved to Homebrew-Cask.
The existing keg has been unlinked.
Please uninstall the formula when convenient by running:
brew uninstall --force #{name}
EOS
else
ohai "#{name} has been moved to Homebrew-Cask.", <<-EOS.undent
ohai "#{name} has been moved to Homebrew-Cask.", <<~EOS
To uninstall the formula and install the cask run:
brew uninstall --force #{name}
brew cask install #{new_name}

View File

@ -26,7 +26,7 @@ module Homebrew
Homebrew.perform_preinstall_checks
if ARGV.include?("--all")
opoo <<-EOS.undent
opoo <<~EOS
We decided to not change the behaviour of `brew upgrade` so
`brew upgrade --all` is equivalent to `brew upgrade` without any other
arguments (so the `--all` is a no-op and can be removed).

View File

@ -26,3 +26,4 @@ require "compat/ENV/shared"
require "compat/ENV/std"
require "compat/ENV/super"
require "compat/utils/shell"
require "compat/extend/string"

View File

@ -0,0 +1,18 @@
class String
def undent
gsub(/^[ \t]{#{(slice(/^[ \t]+/) || '').length}}/, "")
end
alias unindent undent
# eg:
# if foo then <<-EOS.undent_________________________________________________________72
# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
# eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
# minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
# ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
# voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
# sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
# mollit anim id est laborum.
# EOS
alias undent_________________________________________________________72 undent
end

View File

@ -31,7 +31,7 @@ class AmazonWebServicesFormula < Formula
def standard_instructions(home_name, home_value = libexec)
odeprecated "AmazonWebServicesFormula#standard_instructions", "Formula#caveats"
<<-EOS.undent
<<~EOS
Before you can use these tools you must export some variables to your $SHELL.
To export the needed variables, add them to your dotfiles.

View File

@ -5,7 +5,7 @@ module Hbc
include Options
option "--binarydir=PATH", (lambda do |*|
opoo <<-EOS.undent
opoo <<~EOS
Option --binarydir is obsolete!
Homebrew-Cask now uses the same location as your Homebrew installation for executable links.
EOS

View File

@ -5,7 +5,7 @@ class CxxStdlib
class CompatibilityError < StandardError
def initialize(formula, dep, stdlib)
super <<-EOS.undent
super <<~EOS
#{formula.full_name} dependency #{dep.name} was built with a different C++ standard
library (#{stdlib.type_string} from #{stdlib.compiler}). This may cause problems at runtime.
EOS

View File

@ -368,7 +368,7 @@ class FormulaAuditor
if valid_versioned_aliases.empty?
if formula.tap
problem <<-EOS.undent
problem <<~EOS
Formula has other versions so create a versioned alias:
cd #{formula.tap.alias_dir}
ln -s #{formula.path.to_s.gsub(formula.tap.path, "..")} #{alias_name}
@ -379,7 +379,7 @@ class FormulaAuditor
end
unless invalid_versioned_aliases.empty?
problem <<-EOS.undent
problem <<~EOS
Formula has invalid versioned aliases:
#{invalid_versioned_aliases.join("\n ")}
EOS
@ -476,7 +476,7 @@ class FormulaAuditor
when "gfortran"
problem "Use `depends_on :fortran` instead of `depends_on 'gfortran'`"
when "ruby"
problem <<-EOS.undent
problem <<~EOS
Don't use "ruby" as a dependency. If this formula requires a
minimum Ruby version not provided by the system you should
use the RubyRequirement:
@ -484,7 +484,7 @@ class FormulaAuditor
where "1.8" is the minimum version of Ruby required.
EOS
when "open-mpi", "mpich"
problem <<-EOS.undent
problem <<~EOS
There are multiple conflicting ways to install MPI. Use an MPIRequirement:
depends_on :mpi => [<lang list>]
Where <lang list> is a comma delimited list that can include:
@ -492,7 +492,7 @@ class FormulaAuditor
EOS
when *BUILD_TIME_DEPS
next if dep.build? || dep.run?
problem <<-EOS.undent
problem <<~EOS
#{dep} dependency should be
depends_on "#{dep}" => :build
Or if it is indeed a runtime dependency
@ -541,7 +541,7 @@ class FormulaAuditor
first_word = reason.split[0]
if reason =~ /\A[A-Z]/ && !reason.start_with?(*whitelist)
problem <<-EOS.undent
problem <<~EOS
'#{first_word}' from the keg_only reason should be '#{first_word.downcase}'.
EOS
end
@ -1010,7 +1010,7 @@ class FormulaAuditor
return unless formula.tap&.official?
return unless formula.tap.tap_migrations.key?(formula.name)
problem <<-EOS.undent
problem <<~EOS
#{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}.
@ -1021,7 +1021,7 @@ class FormulaAuditor
return unless formula.prefix.directory?
return unless Keg.new(formula.prefix).empty_installation?
problem <<-EOS.undent
problem <<~EOS
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.

View File

@ -324,7 +324,7 @@ module Homebrew
"#{key}: old: #{old_value}, new: #{value}"
end
odie <<-EOS.undent
odie <<~EOS
--keep-old was passed but there are changes in:
#{mismatches.join("\n")}
EOS
@ -428,7 +428,7 @@ module Homebrew
end
unless mismatches.empty?
odie <<-EOS.undent
odie <<~EOS
--keep-old was passed but there are changes in:
#{mismatches.join("\n")}
EOS

View File

@ -91,7 +91,7 @@ module Homebrew
pull_requests = fetch_pull_requests(formula)
return unless pull_requests
return if pull_requests.empty?
duplicates_message = <<-EOS.undent
duplicates_message = <<~EOS
These open pull requests may be duplicates:
#{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")}
EOS
@ -101,7 +101,7 @@ module Homebrew
elsif !ARGV.force? && ARGV.flag?("--quiet")
odie error_message
elsif !ARGV.force?
odie <<-EOS.undent
odie <<~EOS
#{duplicates_message.chomp}
#{error_message}
EOS
@ -247,13 +247,13 @@ module Homebrew
if new_formula_version < old_formula_version
formula.path.atomic_write(backup_file) unless ARGV.dry_run?
odie <<-EOS.undent
odie <<~EOS
You probably need to bump this formula manually since changing the
version from #{old_formula_version} to #{new_formula_version} would be a downgrade.
EOS
elsif new_formula_version == old_formula_version
formula.path.atomic_write(backup_file) unless ARGV.dry_run?
odie <<-EOS.undent
odie <<~EOS
You probably need to bump this formula manually since the new version
and old version are both #{new_formula_version}.
EOS
@ -312,17 +312,15 @@ module Homebrew
remote = Utils.popen_read("hub fork 2>&1")[/remote:? (\S+)/, 1] if remote.to_s.empty?
odie "cannot get remote from 'hub'!" if remote.to_s.empty?
safe_system "git", "push", "--set-upstream", remote, "#{branch}:#{branch}"
pr_message = <<-EOS.undent
pr_message = <<~EOS
#{formula.name} #{new_formula_version}#{devel_message}
Created with `brew bump-formula-pr`.
EOS
user_message = ARGV.value("message")
if user_message
pr_message += <<-EOS.undent
pr_message += <<~EOS
---
#{user_message}
EOS
end

View File

@ -71,7 +71,7 @@ module Homebrew
if Formula.aliases.include? fc.name
realname = Formulary.canonical_name(fc.name)
raise <<-EOS.undent
raise <<~EOS
The formula #{realname} is already aliased to #{fc.name}
Please check that you are not creating a duplicate.
To force creation use --force.
@ -165,7 +165,7 @@ class FormulaCreator
path.write ERB.new(template, nil, ">").result(binding)
end
def template; <<-EOS.undent
def template; <<~EOS
# Documentation: https://docs.brew.sh/Formula-Cookbook.html
# http://www.rubydoc.info/github/Homebrew/brew/master/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!

View File

@ -11,7 +11,7 @@ module Homebrew
def edit
unless (HOMEBREW_REPOSITORY/".git").directory?
raise <<-EOS.undent
raise <<~EOS
Changes will be lost!
The first time you `brew update', all local changes will be lost, you should
thus `brew update' before you `brew edit'!

View File

@ -20,7 +20,7 @@ module Homebrew
package_url = "#{bintray_repo_url}/#{bintray_package}"
unless system "curl", "--silent", "--fail", "--output", "/dev/null", package_url
package_blob = <<-EOS.undent
package_blob = <<~EOS
{"name": "#{bintray_package}",
"public_download_numbers": true,
"public_stats": true}

View File

@ -24,7 +24,7 @@ module Homebrew
(tap.path/"Formula").mkpath
readme = <<-EOS.undent
readme = <<~EOS
# #{titleized_user} #{titleized_repo}
## How do I install these formulae?
@ -43,7 +43,7 @@ module Homebrew
EOS
write_path(tap, "README.md", readme)
travis = <<-EOS.undent
travis = <<~EOS
language: ruby
os: osx
env: OSX=10.12

View File

@ -88,7 +88,7 @@ module Homebrew
safe_system "brew", "update", "--verbose"
actual_end_commit = Utils.popen_read("git", "rev-parse", branch).chomp
if start_commit != end_commit && start_commit == actual_end_commit
raise <<-EOS.undent
raise <<~EOS
brew update didn't update #{branch}!
Start commit: #{start_commit}
Expected end commit: #{end_commit}

View File

@ -92,7 +92,7 @@ module Homebrew
def check_for_installed_developer_tools
return if DevelopmentTools.installed?
<<-EOS.undent
<<~EOS
No developer tools installed.
#{DevelopmentTools.installation_instructions}
EOS
@ -101,7 +101,7 @@ module Homebrew
def check_build_from_source
return unless ENV["HOMEBREW_BUILD_FROM_SOURCE"]
<<-EOS.undent
<<~EOS
You have HOMEBREW_BUILD_FROM_SOURCE set. This environment variable is
intended for use by Homebrew developers. If you are encountering errors,
please try unsetting this. Please do not file issues if you encounter
@ -114,7 +114,7 @@ module Homebrew
bad_paths = PATH.new(ENV["HOMEBREW_PATH"]).select { |p| p.end_with?("/") }
return if bad_paths.empty?
inject_file_list bad_paths, <<-EOS.undent
inject_file_list bad_paths, <<~EOS
Some directories in your path end in a slash.
Directories in your path should not end in a slash. This can break other
doctor checks. The following directories should be edited:
@ -136,7 +136,7 @@ module Homebrew
# Only warn if Python lives with Anaconda, since is most problematic case.
return unless python_directory == anaconda_directory
<<-EOS.undent
<<~EOS
Anaconda is known to frequently break Homebrew builds, including Vim and
MacVim, due to bundling many duplicates of system and Homebrew-available
tools.
@ -182,7 +182,7 @@ module Homebrew
"sentinel.dylib", # SentinelOne
]
__check_stray_files "/usr/local/lib", "*.dylib", white_list, <<-EOS.undent
__check_stray_files "/usr/local/lib", "*.dylib", white_list, <<~EOS
Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
@ -209,7 +209,7 @@ module Homebrew
"libtrustedcomponents.a", # Symantec Endpoint Protection
]
__check_stray_files "/usr/local/lib", "*.a", white_list, <<-EOS.undent
__check_stray_files "/usr/local/lib", "*.a", white_list, <<~EOS
Unbrewed static libraries were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
@ -229,7 +229,7 @@ module Homebrew
"libublio.pc", # NTFS-3G
]
__check_stray_files "/usr/local/lib/pkgconfig", "*.pc", white_list, <<-EOS.undent
__check_stray_files "/usr/local/lib/pkgconfig", "*.pc", white_list, <<~EOS
Unbrewed .pc files were found in /usr/local/lib/pkgconfig.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
@ -250,7 +250,7 @@ module Homebrew
"libublio.la", # NTFS-3G
]
__check_stray_files "/usr/local/lib", "*.la", white_list, <<-EOS.undent
__check_stray_files "/usr/local/lib", "*.la", white_list, <<~EOS
Unbrewed .la files were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
@ -269,7 +269,7 @@ module Homebrew
"ntfs-3g/**/*.h", # NTFS-3G
]
__check_stray_files "/usr/local/include", "**/*.h", white_list, <<-EOS.undent
__check_stray_files "/usr/local/include", "**/*.h", white_list, <<~EOS
Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
@ -291,7 +291,7 @@ module Homebrew
end
return if broken_symlinks.empty?
inject_file_list broken_symlinks, <<-EOS.undent
inject_file_list broken_symlinks, <<~EOS
Broken symlinks were found. Remove them with `brew prune`:
EOS
end
@ -300,7 +300,7 @@ module Homebrew
world_writable = HOMEBREW_TEMP.stat.mode & 0777 == 0777
return if !world_writable || HOMEBREW_TEMP.sticky?
<<-EOS.undent
<<~EOS
#{HOMEBREW_TEMP} is world-writable but does not have the sticky bit set.
Please execute `sudo chmod +t #{HOMEBREW_TEMP}` in your Terminal.
EOS
@ -309,7 +309,7 @@ module Homebrew
def check_access_homebrew_repository
return if HOMEBREW_REPOSITORY.writable_real?
<<-EOS.undent
<<~EOS
#{HOMEBREW_REPOSITORY} is not writable.
You should change the ownership and permissions of #{HOMEBREW_REPOSITORY}
@ -330,7 +330,7 @@ module Homebrew
return if not_writable_dirs.empty?
<<-EOS.undent
<<~EOS
The following directories are not writable:
#{not_writable_dirs.join("\n")}
@ -348,7 +348,7 @@ module Homebrew
return unless Language::Python.homebrew_site_packages.exist?
return if Language::Python.homebrew_site_packages.writable_real?
<<-EOS.undent
<<~EOS
#{Language::Python.homebrew_site_packages} isn't writable.
This can happen if you "sudo pip install" software that isn't managed
by Homebrew. If you install a formula with Python modules, the install
@ -364,7 +364,7 @@ module Homebrew
return unless HOMEBREW_LOCK_DIR.exist?
return if HOMEBREW_LOCK_DIR.writable_real?
<<-EOS.undent
<<~EOS
#{HOMEBREW_LOCK_DIR} isn't writable.
Homebrew writes lock files to this location.
@ -378,7 +378,7 @@ module Homebrew
return unless HOMEBREW_LOGS.exist?
return if HOMEBREW_LOGS.writable_real?
<<-EOS.undent
<<~EOS
#{HOMEBREW_LOGS} isn't writable.
Homebrew writes debugging logs to this location.
@ -392,7 +392,7 @@ module Homebrew
return unless HOMEBREW_CACHE.exist?
return if HOMEBREW_CACHE.writable_real?
<<-EOS.undent
<<~EOS
#{HOMEBREW_CACHE} isn't writable.
This can happen if you run `brew install` or `brew fetch` as another user.
Homebrew caches downloaded files to this location.
@ -407,7 +407,7 @@ module Homebrew
return unless HOMEBREW_CELLAR.exist?
return if HOMEBREW_CELLAR.writable_real?
<<-EOS.undent
<<~EOS
#{HOMEBREW_CELLAR} isn't writable.
You should change the ownership and permissions of #{HOMEBREW_CELLAR}
@ -421,7 +421,7 @@ module Homebrew
return unless (HOMEBREW_REPOSITORY/"Cellar").exist?
return unless (HOMEBREW_PREFIX/"Cellar").exist?
<<-EOS.undent
<<~EOS
You have multiple Cellars.
You should delete #{HOMEBREW_REPOSITORY}/Cellar:
rm -rf #{HOMEBREW_REPOSITORY}/Cellar
@ -445,13 +445,13 @@ module Homebrew
.select { |bn| File.exist? "/usr/bin/#{bn}" }
unless conflicts.empty?
message = inject_file_list conflicts, <<-EOS.undent
message = inject_file_list conflicts, <<~EOS
/usr/bin occurs before #{HOMEBREW_PREFIX}/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:
EOS
message += <<-EOS.undent
message += <<~EOS
Consider setting your PATH so that #{HOMEBREW_PREFIX}/bin
occurs before /usr/bin. Here is a one-liner:
@ -472,7 +472,7 @@ module Homebrew
def check_user_path_2
return if @seen_prefix_bin
<<-EOS.undent
<<~EOS
Homebrew's bin was not found in your PATH.
Consider setting the PATH for example like so
#{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/bin")}
@ -486,7 +486,7 @@ module Homebrew
sbin = HOMEBREW_PREFIX/"sbin"
return unless sbin.directory? && !sbin.children.empty?
<<-EOS.undent
<<~EOS
Homebrew's sbin was not found in your PATH but you have installed
formulae that put executables in #{HOMEBREW_PREFIX}/sbin.
Consider setting the PATH for example like so
@ -500,7 +500,7 @@ module Homebrew
end
return unless curlrc_found
<<-EOS.undent
<<~EOS
You have a curlrc file
If you have trouble downloading packages with Homebrew, then maybe this
is the problem? If the following command doesn't work, then try removing
@ -526,7 +526,7 @@ module Homebrew
end
return if gettext&.linked_keg&.directory? && homebrew_owned
inject_file_list @found, <<-EOS.undent
inject_file_list @found, <<~EOS
gettext files detected at a system prefix.
These files can cause compilation and link failures, especially if they
are compiled with improper architectures. Consider removing these files:
@ -544,13 +544,13 @@ module Homebrew
end
if libiconv&.linked_keg&.directory?
unless libiconv.keg_only?
<<-EOS.undent
<<~EOS
A libiconv formula is installed and linked.
This will break stuff. For serious. Unlink it.
EOS
end
else
inject_file_list @found, <<-EOS.undent
inject_file_list @found, <<~EOS
libiconv files detected at a system prefix other than /usr.
Homebrew doesn't provide a libiconv formula, and expects to link against
the system version in /usr. libiconv in other prefixes can cause
@ -588,7 +588,7 @@ module Homebrew
return if scripts.empty?
inject_file_list scripts, <<-EOS.undent
inject_file_list scripts, <<~EOS
"config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
@ -605,13 +605,13 @@ module Homebrew
return if dyld_vars.empty?
values = dyld_vars.map { |var| "#{var}: #{ENV.fetch(var)}" }
message = inject_file_list values, <<-EOS.undent
message = inject_file_list values, <<~EOS
Setting DYLD_* vars can break dynamic linking.
Set variables:
EOS
if dyld_vars.include? "DYLD_INSERT_LIBRARIES"
message += <<-EOS.undent
message += <<~EOS
Setting DYLD_INSERT_LIBRARIES can cause Go builds to fail.
Having this set is common if you use this software:
@ -624,7 +624,7 @@ module Homebrew
def check_ssl_cert_file
return unless ENV.key?("SSL_CERT_FILE")
<<-EOS.undent
<<~EOS
Setting SSL_CERT_FILE can break downloading files; if that happens
you should unset it before running Homebrew.
@ -638,7 +638,7 @@ module Homebrew
return unless HOMEBREW_CELLAR.exist?
return unless HOMEBREW_CELLAR.symlink?
<<-EOS.undent
<<~EOS
Symlinked Cellars can cause problems.
Your Homebrew Cellar is a symlink: #{HOMEBREW_CELLAR}
which resolves to: #{HOMEBREW_CELLAR.realpath}
@ -675,7 +675,7 @@ module Homebrew
return if where_cellar == where_tmp
<<-EOS.undent
<<~EOS
Your Cellar and TEMP directories are on different volumes.
macOS won't move relative symlinks across volumes unless the target file already
exists. Brews known to be affected by this are Git and Narwhal.
@ -692,7 +692,7 @@ module Homebrew
git = Formula["git"]
git_upgrade_cmd = git.any_version_installed? ? "upgrade" : "install"
<<-EOS.undent
<<~EOS
An outdated version (#{Utils.git_version}) of Git was detected in your PATH.
Git 1.8.5 or newer is required to perform checkouts over HTTPS from GitHub and
to support the 'git -C <path>' option.
@ -704,7 +704,7 @@ module Homebrew
def check_for_git
return if Utils.git_available?
<<-EOS.undent
<<~EOS
Git could not be found in your PATH.
Homebrew uses Git for several internal functions, and some formulae use Git
checkouts instead of stable tarballs. You may want to install Git:
@ -718,7 +718,7 @@ module Homebrew
autocrlf = HOMEBREW_REPOSITORY.cd { `git config --get core.autocrlf`.chomp }
return unless autocrlf == "true"
<<-EOS.undent
<<~EOS
Suspicious Git newline settings found.
The detected Git newline settings will cause checkout problems:
@ -736,7 +736,7 @@ module Homebrew
origin = HOMEBREW_REPOSITORY.git_origin
if origin.nil?
<<-EOS.undent
<<~EOS
Missing Homebrew/brew git origin remote.
Without a correctly configured origin, Homebrew won't update
@ -744,7 +744,7 @@ module Homebrew
git -C "#{HOMEBREW_REPOSITORY}" remote add origin #{Formatter.url("https://github.com/Homebrew/brew.git")}
EOS
elsif origin !~ %r{Homebrew/brew(\.git|/)?$}
<<-EOS.undent
<<~EOS
Suspicious Homebrew/brew git origin remote found.
With a non-standard origin, Homebrew won't pull updates from
@ -765,7 +765,7 @@ module Homebrew
origin = coretap_path.git_origin
if origin.nil?
<<-EOS.undent
<<~EOS
Missing #{CoreTap.instance} git origin remote.
Without a correctly configured origin, Homebrew won't update
@ -775,7 +775,7 @@ module Homebrew
elsif origin !~ %r{Homebrew/homebrew-core(\.git|/)?$}
return if ENV["CI"] && origin.include?("Homebrew/homebrew-test-bot")
<<-EOS.undent
<<~EOS
Suspicious #{CoreTap.instance} git origin remote found.
With a non-standard origin, Homebrew won't pull updates from
@ -793,7 +793,7 @@ module Homebrew
branch = coretap_path.git_branch
return if branch.nil? || branch =~ /master/
<<-EOS.undent
<<~EOS
Homebrew/homebrew-core is not on the master branch
Check out the master branch by running:
@ -821,7 +821,7 @@ module Homebrew
end
return if linked.empty?
inject_file_list linked.map(&:full_name), <<-EOS.undent
inject_file_list linked.map(&:full_name), <<~EOS
Some keg-only formula are linked into the Cellar.
Linking a keg-only formula, such as gettext, into the cellar with
`brew link <formula>` will cause other formulae to detect them during
@ -847,7 +847,7 @@ module Homebrew
.select { |framework| File.exist? framework }
return if frameworks_found.empty?
inject_file_list frameworks_found, <<-EOS.undent
inject_file_list frameworks_found, <<~EOS
Some frameworks can be picked up by CMake's build system and likely
cause the build to fail. To compile CMake, you may wish to move these
out of the way:
@ -858,7 +858,7 @@ module Homebrew
tmpdir = ENV["TMPDIR"]
return if tmpdir.nil? || File.directory?(tmpdir)
<<-EOS.undent
<<~EOS
TMPDIR #{tmpdir.inspect} doesn't exist.
EOS
end
@ -871,7 +871,7 @@ module Homebrew
end
return if missing.empty?
<<-EOS.undent
<<~EOS
Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:
brew install #{missing.sort_by(&:full_name) * " "}
@ -886,7 +886,7 @@ module Homebrew
return if `git status --untracked-files=all --porcelain -- Library/Homebrew/ 2>/dev/null`.chomp.empty?
end
<<-EOS.undent
<<~EOS
You have uncommitted modifications to Homebrew
If this is a surprise to you, then you should stash these modifications.
Stashing returns Homebrew to a pristine state but can be undone
@ -898,7 +898,7 @@ module Homebrew
def check_for_enthought_python
return unless which "enpkg"
<<-EOS.undent
<<~EOS
Enthought Python was found in your PATH.
This can cause build problems, as this software installs its own
copies of iconv and libxml2 into directories that are picked up by
@ -909,7 +909,7 @@ module Homebrew
def check_for_library_python
return unless File.exist?("/Library/Frameworks/Python.framework")
<<-EOS.undent
<<~EOS
Python is installed at /Library/Frameworks/Python.framework
Homebrew only supports building against the System-provided Python or a
@ -922,12 +922,12 @@ module Homebrew
message = ""
["", "3"].map do |suffix|
next unless paths.include?((HOMEBREW_PREFIX/"share/python#{suffix}").to_s)
message += <<-EOS.undent
#{HOMEBREW_PREFIX}/share/python#{suffix} is not needed in PATH.
message += <<~EOS
#{HOMEBREW_PREFIX}/share/python#{suffix} is not needed in PATH.
EOS
end
unless message.empty?
message += <<-EOS.undent
message += <<~EOS
Formerly homebrew put Python scripts you installed via `pip` or `pip3`
(or `easy_install`) into that directory above but now it can be removed
@ -949,7 +949,7 @@ module Homebrew
return if Regexp.last_match(1).nil?
return if Regexp.last_match(1) == "2"
<<-EOS.undent
<<~EOS
python is symlinked to python#{Regexp.last_match(1)}
This will confuse build scripts and in general lead to subtle breakage.
EOS
@ -962,7 +962,7 @@ module Homebrew
gnubin = %W[#{coreutils.opt_libexec}/gnubin #{coreutils.libexec}/gnubin]
return if (paths & gnubin).empty?
<<-EOS.undent
<<~EOS
Putting non-prefixed coreutils in your path can cause gmp builds to fail.
EOS
rescue FormulaUnavailableError
@ -977,7 +977,7 @@ module Homebrew
default_names = Tab.for_name("findutils").with? "default-names"
return if !default_names && (paths & gnubin).empty?
<<-EOS.undent
<<~EOS
Putting non-prefixed findutils in your path can cause python builds to fail.
EOS
rescue FormulaUnavailableError
@ -987,7 +987,7 @@ module Homebrew
def check_for_pydistutils_cfg_in_home
return unless File.exist? "#{ENV["HOME"]}/.pydistutils.cfg"
<<-EOS.undent
<<~EOS
A .pydistutils.cfg file was found in $HOME, which may cause Python
builds to fail. See:
#{Formatter.url("https://bugs.python.org/issue6138")}
@ -1009,7 +1009,7 @@ module Homebrew
end.map(&:basename)
return if unlinked.empty?
inject_file_list unlinked, <<-EOS.undent
inject_file_list unlinked, <<~EOS
You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
@ -1019,7 +1019,7 @@ module Homebrew
def check_for_old_env_vars
return unless ENV["HOMEBREW_KEEP_INFO"]
<<-EOS.undent
<<~EOS
`HOMEBREW_KEEP_INFO` is no longer used
info files are no longer deleted by default; you may
remove this environment variable.
@ -1033,7 +1033,7 @@ module Homebrew
return unless Language::Python.in_sys_path?("python", homebrew_site_packages)
user_site_packages = Language::Python.user_site_packages "python"
<<-EOS.undent
<<~EOS
Your default Python does not recognize the Homebrew site-packages
directory as a special site-packages directory, which means that .pth
files will not be followed. This means you will not be able to import
@ -1063,8 +1063,7 @@ module Homebrew
message = "You have external commands with conflicting names.\n"
cmd_map.each do |cmd_name, cmd_paths|
message += inject_file_list cmd_paths, <<-EOS.undent
message += inject_file_list cmd_paths, <<~EOS
Found command `#{cmd_name}` in following places:
EOS
end
@ -1087,7 +1086,7 @@ module Homebrew
end
return if bad_tap_files.empty?
bad_tap_files.keys.map do |tap|
<<-EOS.undent
<<~EOS
Found Ruby file outside #{tap} tap formula directory
(#{tap.formula_dir}):
#{bad_tap_files[tap].join("\n ")}

View File

@ -159,7 +159,7 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
return unless @ref_type == :tag
return unless @revision && current_revision
return if current_revision == @revision
raise <<-EOS.undent
raise <<~EOS
#{@ref} tag should be #{@revision}
but is actually #{current_revision}
EOS
@ -553,9 +553,9 @@ class GitHubPrivateRepositoryDownloadStrategy < CurlDownloadStrategy
rescue GitHub::HTTPNotFoundError
# We only handle HTTPNotFoundError here,
# becase AuthenticationFailedError is handled within util/github.
message = <<-EOS.undent
HOMEBREW_GITHUB_API_TOKEN can not access the repository: #{@owner}/#{@repo}
This token may not have permission to access the repository or the url of formula may be incorrect.
message = <<~EOS
HOMEBREW_GITHUB_API_TOKEN can not access the repository: #{@owner}/#{@repo}
This token may not have permission to access the repository or the url of formula may be incorrect.
EOS
raise CurlDownloadStrategyError, message
end

View File

@ -185,7 +185,7 @@ class TapFormulaAmbiguityError < RuntimeError
"#{Tap.fetch(match[:user], match[:repo])}/#{path.basename(".rb")}"
end
super <<-EOS.undent
super <<~EOS
Formulae found in multiple taps: #{formulae.map { |f| "\n * #{f}" }.join}
Please use the fully-qualified name e.g. #{formulae.first} to refer the formula.
@ -205,7 +205,7 @@ class TapFormulaWithOldnameAmbiguityError < RuntimeError
"#{Regexp.last_match(1)}/#{Regexp.last_match(2)}"
end
super <<-EOS.undent
super <<~EOS
Formulae with '#{name}' old name found in multiple taps: #{taps.map { |t| "\n * #{t}" }.join}
Please use the fully-qualified name e.g. #{taps.first}/#{name} to refer the formula or use its new name.
@ -219,7 +219,7 @@ class TapUnavailableError < RuntimeError
def initialize(name)
@name = name
super <<-EOS.undent
super <<~EOS
No available tap #{name}.
EOS
end
@ -235,7 +235,7 @@ class TapRemoteMismatchError < RuntimeError
@expected_remote = expected_remote
@actual_remote = actual_remote
super <<-EOS.undent
super <<~EOS
Tap #{name} remote mismatch.
#{expected_remote} != #{actual_remote}
EOS
@ -248,7 +248,7 @@ class TapAlreadyTappedError < RuntimeError
def initialize(name)
@name = name
super <<-EOS.undent
super <<~EOS
Tap #{name} already tapped.
EOS
end
@ -260,7 +260,7 @@ class TapAlreadyUnshallowError < RuntimeError
def initialize(name)
@name = name
super <<-EOS.undent
super <<~EOS
Tap #{name} already a full clone.
EOS
end
@ -279,7 +279,7 @@ end
class OperationInProgressError < RuntimeError
def initialize(name)
message = <<-EOS.undent
message = <<~EOS
Operation already in progress for #{name}
Another active Homebrew process is already using #{name}.
Please wait for it to finish or terminate it to continue.
@ -327,7 +327,7 @@ class FormulaConflictError < RuntimeError
message = []
message << "Cannot install #{formula.full_name} because conflicting formulae are installed."
message.concat conflicts.map { |c| conflict_message(c) } << ""
message << <<-EOS.undent
message << <<~EOS
Please `brew unlink #{conflicts.map(&:name) * " "}` before continuing.
Unlinking removes a formula's symlinks from #{HOMEBREW_PREFIX}. You can
@ -341,7 +341,7 @@ end
class FormulaAmbiguousPythonError < RuntimeError
def initialize(formula)
super <<-EOS.undent
super <<~EOS
The version of python to use with the virtualenv in the `#{formula.full_name}` formula
cannot be guessed automatically. If the simultaneous use of python and python3
is intentional, please add `:using => "python"` or `:using => "python3"` to
@ -398,18 +398,18 @@ class BuildError < RuntimeError
if formula.tap.official?
puts Formatter.error(Formatter.url(OS::ISSUES_URL), label: "READ THIS")
elsif issues_url = formula.tap.issues_url
puts <<-EOS.undent
puts <<~EOS
If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
#{Formatter.url(issues_url)}
EOS
else
puts <<-EOS.undent
puts <<~EOS
If reporting this issue please do so to (not Homebrew/brew or Homebrew/core):
#{formula.tap}
EOS
end
else
puts <<-EOS.undent
puts <<~EOS
Do not report this issue to Homebrew/brew or Homebrew/core!
EOS
end
@ -445,7 +445,7 @@ class BuildToolsError < RuntimeError
package_text = "a binary package"
end
super <<-EOS.undent
super <<~EOS
The following #{formula_text}:
#{formulae.join(", ")}
cannot be installed as #{package_text} and must be built from source.
@ -467,7 +467,7 @@ class BuildFlagsError < RuntimeError
require_text = "requires"
end
super <<-EOS.undent
super <<~EOS
The following #{flag_text}:
#{flags.join(", ")}
#{require_text} building tools, but none are installed.
@ -481,7 +481,7 @@ end
# the compilers available on the user's system
class CompilerSelectionError < RuntimeError
def initialize(formula)
super <<-EOS.undent
super <<~EOS
#{formula.full_name} cannot be built with any available compilers.
#{DevelopmentTools.custom_installation_instructions}
EOS
@ -491,7 +491,7 @@ end
# Raised in Resource.fetch
class DownloadError < RuntimeError
def initialize(resource, cause)
super <<-EOS.undent
super <<~EOS
Failed to download resource #{resource.download_name.inspect}
#{cause.message}
EOS
@ -530,7 +530,7 @@ class ChecksumMismatchError < RuntimeError
@expected = expected
@hash_type = expected.hash_type.to_s.upcase
super <<-EOS.undent
super <<~EOS
#{@hash_type} mismatch
Expected: #{expected}
Actual: #{actual}
@ -557,7 +557,7 @@ class MissingApplyError < RuntimeError; end
class BottleFormulaUnavailableError < RuntimeError
def initialize(bottle_path, formula_path)
super <<-EOS.undent
super <<~EOS
This bottle does not contain the formula file:
#{bottle_path}
#{formula_path}

View File

@ -124,7 +124,7 @@ module HomebrewArgvExtension
Keg.new(prefix)
end
rescue FormulaUnavailableError
raise <<-EOS.undent
raise <<~EOS
Multiple kegs installed to #{rack}
However we don't know which one you refer to.
Please delete (with rm -rf!) all but one and then try again.

View File

@ -233,7 +233,7 @@ module SharedEnvExtension
if ARGV.include? "--default-fortran-flags"
flags = FC_FLAG_VARS.reject { |key| self[key] }
elsif values_at(*FC_FLAG_VARS).compact.empty?
opoo <<-EOS.undent
opoo <<~EOS
No Fortran optimization information was provided. You may want to consider
setting FCFLAGS and FFLAGS or pass the `--default-fortran-flags` option to
`brew install` if your compiler is compatible with GCC.
@ -286,15 +286,15 @@ module SharedEnvExtension
begin
gcc_formula = gcc_version_formula(name)
rescue FormulaUnavailableError => e
raise <<-EOS.undent
Homebrew GCC requested, but formula #{e.name} not found!
raise <<~EOS
Homebrew GCC requested, but formula #{e.name} not found!
EOS
end
return if gcc_formula.opt_prefix.exist?
raise <<-EOS.undent
The requested Homebrew GCC was not installed. You must:
brew install #{gcc_formula.full_name}
raise <<~EOS
The requested Homebrew GCC was not installed. You must:
brew install #{gcc_formula.full_name}
EOS
end

View File

@ -18,7 +18,7 @@ class OsxfuseRequirement < Requirement
def message
msg = "libfuse is required to install this formula.\n"
if libfuse_formula_exists?
msg + <<-EOS.undent
msg + <<~EOS
Run "brew install libfuse" to install it.
EOS
else

View File

@ -24,18 +24,18 @@ class DevelopmentTools
def installation_instructions
if MacOS.version >= "10.9"
<<-EOS.undent
<<~EOS
Install the Command Line Tools:
xcode-select --install
EOS
elsif MacOS.version == "10.8" || MacOS.version == "10.7"
<<-EOS.undent
<<~EOS
Install the Command Line Tools from
https://developer.apple.com/download/more/
or via Xcode's preferences.
EOS
else
<<-EOS.undent
<<~EOS
Install Xcode from
https://developer.apple.com/download/more/
EOS
@ -44,19 +44,19 @@ class DevelopmentTools
def custom_installation_instructions
if MacOS.version > :leopard
<<-EOS.undent
<<~EOS
Install GNU's GCC
brew install gcc
EOS
elsif MacOS.version > :tiger
<<-EOS.undent
<<~EOS
Install GNU's GCC
brew install gcc@4.6
EOS
else
# Tiger doesn't ship with apple-gcc42, and this is required to build
# some software that doesn't build properly with FSF GCC.
<<-EOS.undent
<<~EOS
Install Apple's GCC
brew install apple-gcc42
or GNU's GCC

View File

@ -41,7 +41,7 @@ module Homebrew
return
end
<<-EOS.undent
<<~EOS
You are using macOS #{MacOS.version}.
#{who} do not provide support for this #{what}.
You may encounter build failures or other breakages.
@ -59,7 +59,7 @@ module Homebrew
# Homebrew/brew is currently using.
return if ENV["TRAVIS"]
message = <<-EOS.undent
message = <<~EOS
Your Xcode (#{MacOS::Xcode.version}) is outdated.
Please update to Xcode #{MacOS::Xcode.latest_version} (or delete it).
#{MacOS::Xcode.update_instructions}
@ -67,7 +67,7 @@ module Homebrew
if OS::Mac.prerelease?
current_path = Utils.popen_read("/usr/bin/xcode-select", "-p")
message += <<-EOS.undent
message += <<~EOS
If #{MacOS::Xcode.latest_version} is installed, you may need to:
sudo xcode-select --switch /Applications/Xcode.app
Current developer directory is:
@ -87,7 +87,7 @@ module Homebrew
# Homebrew/brew is currently using.
return if ENV["TRAVIS"]
<<-EOS.undent
<<~EOS
A newer Command Line Tools release is available.
#{MacOS::CLT.update_instructions}
EOS
@ -99,7 +99,7 @@ module Homebrew
return unless MacOS.version == :el_capitan
return unless MacOS::Xcode.version >= "8"
<<-EOS.undent
<<~EOS
You have Xcode 8 installed without the CLT;
this causes certain builds to fail on OS X El Capitan (10.11).
Please install the CLT via:
@ -111,7 +111,7 @@ module Homebrew
return unless MacOS::Xcode.installed?
return unless MacOS::Xcode.below_minimum_version?
<<-EOS.undent
<<~EOS
Your Xcode (#{MacOS::Xcode.version}) is too outdated.
Please update to Xcode #{MacOS::Xcode.latest_version} (or delete it).
#{MacOS::Xcode.update_instructions}
@ -122,7 +122,7 @@ module Homebrew
return unless MacOS::CLT.installed?
return unless MacOS::CLT.below_minimum_version?
<<-EOS.undent
<<~EOS
Your Command Line Tools are too outdated.
#{MacOS::CLT.update_instructions}
EOS
@ -140,7 +140,7 @@ module Homebrew
"Please install Xcode #{MacOS::Xcode.latest_version}."
end
<<-EOS.undent
<<~EOS
You seem to have osx-gcc-installer installed.
Homebrew doesn't support osx-gcc-installer. It causes many builds to fail and
is an unlicensed distribution of really old Xcode files.
@ -154,7 +154,7 @@ module Homebrew
uninstaller = Pathname.new("/Developer/Library/uninstall-developer-folder")
return unless ((MacOS::Xcode.version || "0") >= "4.3") && uninstaller.exist?
<<-EOS.undent
<<~EOS
You have leftover files from an older version of Xcode.
You should delete them using:
#{uninstaller}
@ -170,7 +170,7 @@ module Homebrew
return if libs.empty?
return if libs.include? "/usr/lib/libxcselect.dylib"
<<-EOS.undent
<<~EOS
You have an outdated version of /usr/bin/install_name_tool installed.
This will cause binary package installations to fail.
This can happen if you install osx-gcc-installer or RailsInstaller.
@ -183,7 +183,7 @@ module Homebrew
ponk = MacOS.macports_or_fink
return if ponk.empty?
<<-EOS.undent
<<~EOS
You have MacPorts or Fink installed:
#{ponk.join(", ")}
@ -199,7 +199,7 @@ module Homebrew
return if RUBY_VERSION == ruby_version
return if ARGV.homebrew_developer? && OS::Mac.prerelease?
<<-EOS.undent
<<~EOS
Ruby version #{RUBY_VERSION} is unsupported on #{MacOS.version}. Homebrew
is developed and tested on Ruby #{ruby_version}, and may not work correctly
on other Rubies. Patches are accepted as long as they don't cause breakage
@ -212,7 +212,7 @@ module Homebrew
return if prefix.nil?
return unless prefix.to_s.include?(" ")
<<-EOS.undent
<<~EOS
Xcode is installed to a directory with a space in the name.
This will cause some formulae to fail to build.
EOS
@ -222,7 +222,7 @@ module Homebrew
prefix = MacOS::Xcode.prefix
return if prefix.nil? || prefix.exist?
<<-EOS.undent
<<~EOS
The directory Xcode is reportedly installed to doesn't exist:
#{prefix}
You may need to `xcode-select` the proper path if you have moved Xcode.
@ -236,7 +236,7 @@ module Homebrew
path = MacOS::Xcode.bundle_path
path = "/Developer" if path.nil? || !path.directory?
<<-EOS.undent
<<~EOS
Your Xcode is configured with an invalid path.
You should change it to the correct path:
sudo xcode-select -switch #{path}
@ -247,7 +247,7 @@ module Homebrew
return unless MacOS.version <= "10.8"
return if Formula["curl"].installed?
<<-EOS.undent
<<~EOS
The system curl on 10.8 and below is often incapable of supporting
modern secure connections & will fail on fetching formulae.
@ -261,7 +261,7 @@ module Homebrew
return unless MacOS.version >= :yosemite
return if ENV["SSL_CERT_DIR"].nil?
<<-EOS.undent
<<~EOS
SSL_CERT_DIR support was removed from Apple's curl.
If fetching formulae fails you should:
unset SSL_CERT_DIR
@ -274,7 +274,7 @@ module Homebrew
# license or no "xc*" tool will work.
return unless `/usr/bin/xcrun clang 2>&1` =~ /license/ && !$CHILD_STATUS.success?
<<-EOS.undent
<<~EOS
You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
sudo xcodebuild -license
@ -289,7 +289,7 @@ module Homebrew
latest_version = Version.create(MacOS::XQuartz.latest_version)
return if installed_version >= latest_version
<<-EOS.undent
<<~EOS
Your XQuartz (#{installed_version}) is outdated.
Please install XQuartz #{latest_version} (or delete the current version).
XQuartz can be updated using Homebrew-Cask by running
@ -301,7 +301,7 @@ module Homebrew
return unless MacOS::XQuartz.version
return unless MacOS::XQuartz.version.include? "beta"
<<-EOS.undent
<<~EOS
The following beta release of XQuartz is installed: #{MacOS::XQuartz.version}
XQuartz beta releases include address sanitization, and do not work with
@ -337,7 +337,7 @@ module Homebrew
end
case_sensitive_vols.uniq!
<<-EOS.undent
<<~EOS
The filesystem on #{case_sensitive_vols.join(",")} appears to be case-sensitive.
The default macOS filesystem is case-insensitive. Please report any apparent problems.
EOS
@ -346,7 +346,7 @@ module Homebrew
def check_homebrew_prefix
return if HOMEBREW_PREFIX.to_s == "/usr/local"
<<-EOS.undent
<<~EOS
Your Homebrew's prefix is not /usr/local.
You can install Homebrew anywhere you want but some bottles (binary packages)
can only be used with a /usr/local prefix and some formulae (packages)
@ -360,7 +360,7 @@ module Homebrew
mono_config = Pathname.new("/usr/bin/pkg-config")
if mono_config.exist? && mono_config.realpath.to_s.include?("Mono.framework")
<<-EOS.undent
<<~EOS
You have a non-Homebrew 'pkg-config' in your PATH:
/usr/bin/pkg-config => #{mono_config.realpath}
@ -371,7 +371,7 @@ module Homebrew
`sudo rm /usr/bin/pkg-config` and upgrade to the latest version of Mono.
EOS
elsif binary.to_s != "#{HOMEBREW_PREFIX}/bin/pkg-config"
<<-EOS.undent
<<~EOS
You have a non-Homebrew 'pkg-config' in your PATH:
#{binary}

View File

@ -19,7 +19,7 @@ module FormulaCellarChecks
return if files.empty?
<<-EOS.undent
<<~EOS
Header files that shadow system header files were installed to "#{formula.include}"
The offending files are:
#{files * "\n "}
@ -35,7 +35,7 @@ module FormulaCellarChecks
end
return if system_openssl.empty?
<<-EOS.undent
<<~EOS
object files were linked against system openssl
These object files were linked against the deprecated system OpenSSL or
the system's private LibreSSL.
@ -52,7 +52,7 @@ module FormulaCellarChecks
end
return if framework_links.empty?
<<-EOS.undent
<<~EOS
python modules have explicit framework links
These python extension modules were linked directly to a Python
framework binary. They should be linked with -undefined dynamic_lookup
@ -67,13 +67,13 @@ module FormulaCellarChecks
checker = LinkageChecker.new(keg, formula)
return unless checker.broken_dylibs?
output = <<-EOS.undent
output = <<~EOS
#{formula} has broken dynamic library links:
#{checker.broken_dylibs.to_a * "\n "}
EOS
tab = Tab.for_keg(keg)
if tab.poured_from_bottle
output += <<-EOS.undent
output += <<~EOS
Rebuild this from source with:
brew reinstall --build-from-source #{formula}
If that's successful, file an issue#{formula.tap ? " here:\n #{formula.tap.issues_url}" : "."}

View File

@ -5,12 +5,12 @@ module Homebrew
case name.downcase
when "xcode"
if MacOS.version >= :lion
<<-EOS.undent
Xcode can be installed from the App Store.
<<~EOS
Xcode can be installed from the App Store.
EOS
else
<<-EOS.undent
Xcode can be installed from #{Formatter.url("https://developer.apple.com/download/more/")}.
<<~EOS
Xcode can be installed from #{Formatter.url("https://developer.apple.com/download/more/")}.
EOS
end
else

View File

@ -26,7 +26,7 @@ class NonBinaryOsxfuseRequirement < Requirement
satisfy(build_env: false) { HOMEBREW_PREFIX.to_s != "/usr/local" || !OsxfuseRequirement.binary_osxfuse_installed? }
def message
<<-EOS.undent
<<~EOS
osxfuse is already installed from the binary distribution and
conflicts with this formula.
EOS

View File

@ -403,7 +403,7 @@ class Pathname
mkpath
targets.each do |target|
target = Pathname.new(target) # allow pathnames or strings
join(target.basename).write <<-EOS.undent
join(target.basename).write <<~EOS
#!/bin/bash
exec "#{target}" "$@"
EOS
@ -415,9 +415,9 @@ class Pathname
env_export = ""
env.each { |key, value| env_export += "#{key}=\"#{value}\" " }
dirname.mkpath
write <<-EOS.undent
#!/bin/bash
#{env_export}exec "#{target}" "$@"
write <<~EOS
#!/bin/bash
#{env_export}exec "#{target}" "$@"
EOS
end
@ -435,7 +435,7 @@ class Pathname
# Writes an exec script that invokes a java jar
def write_jar_script(target_jar, script_name, java_opts = "")
mkpath
join(script_name).write <<-EOS.undent
join(script_name).write <<~EOS
#!/bin/bash
exec java #{java_opts} -jar #{target_jar} "$@"
EOS

View File

@ -2,23 +2,6 @@
require_relative "../vendor/backports/string"
class String
def undent
gsub(/^[ \t]{#{(slice(/^[ \t]+/) || '').length}}/, "")
end
alias unindent undent
# eg:
# if foo then <<-EOS.undent_________________________________________________________72
# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
# eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
# minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
# ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
# voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
# sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
# mollit anim id est laborum.
# EOS
alias undent_________________________________________________________72 undent
# String.chomp, but if result is empty: returns nil instead.
# Allows `chuzzle || foo` short-circuits.
def chuzzle

View File

@ -839,7 +839,7 @@ class Formula
# This method can be overridden to provide a plist.
# For more examples read Apple's handy manpage:
# https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/plist.5.html
# <pre>def plist; <<-EOS.undent
# <pre>def plist; <<~EOS
# <?xml version="1.0" encoding="UTF-8"?>
# <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
# <plist version="1.0">
@ -986,13 +986,13 @@ class Formula
# to installation through a different package manager on a different OS.
# @return [String]
# <pre>def caveats
# <<-EOS.undent
# <<~EOS
# Are optional. Something the user should know?
# EOS
# end</pre>
#
# <pre>def caveats
# s = <<-EOS.undent
# s = <<~EOS
# Print some important notice to the user when `brew info <formula>` is
# called or when brewing a formula.
# This is optional. You can use all the vars like #{version} here.
@ -1691,7 +1691,7 @@ class Formula
# keep Homebrew's site-packages in sys.path when using system Python
user_site_packages = home/"Library/Python/2.7/lib/python/site-packages"
user_site_packages.mkpath
(user_site_packages/"homebrew.pth").write <<-EOS.undent
(user_site_packages/"homebrew.pth").write <<~EOS
import site; site.addsitedir("#{HOMEBREW_PREFIX}/lib/python2.7/site-packages")
import sys, os; sys.path = (os.environ["PYTHONPATH"].split(os.pathsep) if "PYTHONPATH" in os.environ else []) + ["#{HOMEBREW_PREFIX}/lib/python2.7/site-packages"] + sys.path
EOS
@ -2394,7 +2394,7 @@ class Formula
# and building the software was ok.
# <pre>system bin/"foobar", "--version"</pre>
#
# <pre>(testpath/"test.file").write <<-EOS.undent
# <pre>(testpath/"test.file").write <<~EOS
# writing some test file, if you need to
# EOS
# assert_equal "OK", shell_output("test_command test.file").strip</pre>

View File

@ -12,7 +12,7 @@ module FormulaCellarChecks
prefix_bin = prefix_bin.realpath
return if ORIGINAL_PATHS.include? prefix_bin
<<-EOS.undent
<<~EOS
#{prefix_bin} is not in your PATH
You can amend this by altering your #{Utils::Shell.profile} file
EOS
@ -22,7 +22,7 @@ module FormulaCellarChecks
# Check for man pages that aren't in share/man
return unless (formula.prefix/"man").directory?
<<-EOS.undent
<<~EOS
A top-level "man" directory was found
Homebrew requires that man pages live under share.
This can often be fixed by passing "--mandir=\#{man}" to configure.
@ -33,7 +33,7 @@ module FormulaCellarChecks
# Check for info pages that aren't in share/info
return unless (formula.prefix/"info").directory?
<<-EOS.undent
<<~EOS
A top-level "info" directory was found
Homebrew suggests that info pages live under share.
This can often be fixed by passing "--infodir=\#{info}" to configure.
@ -45,7 +45,7 @@ module FormulaCellarChecks
jars = formula.lib.children.select { |g| g.extname == ".jar" }
return if jars.empty?
<<-EOS.undent
<<~EOS
JARs were installed to "#{formula.lib}"
Installing JARs to "lib" can cause conflicts between packages.
For Java software, it is typically better for the formula to
@ -67,7 +67,7 @@ module FormulaCellarChecks
end
return if non_libraries.empty?
<<-EOS.undent
<<~EOS
Non-libraries were installed to "#{formula.lib}"
Installing non-libraries to "lib" is discouraged.
The offending files are:
@ -81,7 +81,7 @@ module FormulaCellarChecks
non_exes = bin.children.select { |g| g.directory? || !g.executable? }
return if non_exes.empty?
<<-EOS.undent
<<~EOS
Non-executables were installed to "#{bin}"
The offending files are:
#{non_exes * "\n "}
@ -94,7 +94,7 @@ module FormulaCellarChecks
generics = bin.children.select { |g| generic_names.include? g.basename.to_s }
return if generics.empty?
<<-EOS.undent
<<~EOS
Generic binaries were installed to "#{bin}"
Binaries with generic names are likely to conflict with other software,
and suggest that this software should be installed to "libexec" and then
@ -109,7 +109,7 @@ module FormulaCellarChecks
pth_found = Dir["#{lib}/python{2.7,3}*/site-packages/easy-install.pth"].map { |f| File.dirname(f) }
return if pth_found.empty?
<<-EOS.undent
<<~EOS
easy-install.pth files were found
These .pth files are likely to cause link conflicts. Please invoke
setup.py using Language::Python.setup_install_args.
@ -128,7 +128,7 @@ module FormulaCellarChecks
end
return unless bad_dir_name
<<-EOS
<<~EOS
Emacs Lisp files were installed into the wrong site-lisp subdirectory.
They should be installed into:
#{share}/emacs/site-lisp/#{name}
@ -142,7 +142,7 @@ module FormulaCellarChecks
elisps = (share/"emacs/site-lisp").children.select { |file| %w[.el .elc].include? file.extname }
return if elisps.empty?
<<-EOS.undent
<<~EOS
Emacs Lisp files were linked directly to #{HOMEBREW_PREFIX}/share/emacs/site-lisp
This may cause conflicts with other packages.
They should instead be installed into:

View File

@ -93,7 +93,7 @@ class FormulaInstaller
return false if formula.bottle_disabled?
unless formula.pour_bottle?
if install_bottle_options[:warn] && formula.pour_bottle_check_unsatisfied_reason
opoo <<-EOS.undent
opoo <<~EOS
Building #{formula.full_name} from source:
#{formula.pour_bottle_check_unsatisfied_reason}
EOS
@ -104,7 +104,7 @@ class FormulaInstaller
bottle = formula.bottle_specification
unless bottle.compatible_cellar?
if install_bottle_options[:warn]
opoo <<-EOS.undent
opoo <<~EOS
Building #{formula.full_name} from source:
The bottle needs a #{bottle.cellar} Cellar (yours is #{HOMEBREW_CELLAR}).
EOS
@ -165,14 +165,14 @@ class FormulaInstaller
end
unless recursive_dependencies.empty?
raise CannotInstallFormulaError, <<-EOS.undent
raise CannotInstallFormulaError, <<~EOS
#{formula.full_name} contains a recursive dependency on itself:
#{recursive_dependencies.join("\n ")}
EOS
end
if recursive_formulae.flat_map(&:recursive_dependencies).map(&:to_s).include?(formula.name)
raise CannotInstallFormulaError, <<-EOS.undent
raise CannotInstallFormulaError, <<~EOS
#{formula.full_name} contains a recursive dependency on itself!
EOS
end
@ -188,7 +188,7 @@ class FormulaInstaller
version_conflicts += version_hash[unversioned_name]
end
unless version_conflicts.empty?
raise CannotInstallFormulaError, <<-EOS.undent
raise CannotInstallFormulaError, <<~EOS
#{formula.full_name} contains conflicting version recursive dependencies:
#{version_conflicts.to_a.join ", "}
View these with `brew deps --tree #{formula.full_name}`.
@ -221,16 +221,16 @@ class FormulaInstaller
# function but after instantiating this class so that it can avoid having to
# relink the active keg if possible (because it is slow).
if formula.linked_keg.directory?
message = <<-EOS.undent
message = <<~EOS
#{formula.name} #{formula.linked_version} is already installed
EOS
message += if formula.outdated? && !formula.head?
<<-EOS.undent
<<~EOS
To upgrade to #{formula.pkg_version}, run `brew upgrade #{formula.name}`
EOS
else
# some other version is already installed *and* linked
<<-EOS.undent
<<~EOS
To install #{formula.pkg_version}, first run `brew unlink #{formula.name}`
EOS
end
@ -355,7 +355,7 @@ class FormulaInstaller
rescue FormulaUnavailableError => e
# If the formula name doesn't exist any more then complain but don't
# stop installation from continuing.
opoo <<-EOS.undent
opoo <<~EOS
#{formula}: #{e.message}
'conflicts_with \"#{c.name}\"' should be removed from #{formula.path.basename}.
EOS

View File

@ -33,33 +33,33 @@ class KegOnlyReason
def to_s
return @explanation unless @explanation.empty?
case @reason
when :versioned_formula then <<-EOS.undent
when :versioned_formula then <<~EOS
this is an alternate version of another formula
EOS
when :provided_by_macos, :provided_by_osx then <<-EOS.undent
when :provided_by_macos, :provided_by_osx then <<~EOS
macOS already provides this software and installing another version in
parallel can cause all kinds of trouble
EOS
when :shadowed_by_macos, :shadowed_by_osx then <<-EOS.undent
when :shadowed_by_macos, :shadowed_by_osx then <<~EOS
macOS provides similar software and installing this software in
parallel can cause all kinds of trouble
EOS
when :provided_pre_mountain_lion then <<-EOS.undent
when :provided_pre_mountain_lion then <<~EOS
macOS already provides this software in versions before Mountain Lion
EOS
when :provided_pre_mavericks then <<-EOS.undent
when :provided_pre_mavericks then <<~EOS
macOS already provides this software in versions before Mavericks
EOS
when :provided_pre_el_capitan then <<-EOS.undent
when :provided_pre_el_capitan then <<~EOS
macOS already provides this software in versions before El Capitan
EOS
when :provided_pre_high_sierra then <<-EOS.undent
when :provided_pre_high_sierra then <<~EOS
macOS already provides this software in versions before High Sierra
EOS
when :provided_until_xcode43 then <<-EOS.undent
when :provided_until_xcode43 then <<~EOS
Xcode provides this software prior to version 4.3
EOS
when :provided_until_xcode5 then <<-EOS.undent
when :provided_until_xcode5 then <<~EOS
Xcode provides this software prior to version 5
EOS
else

View File

@ -128,7 +128,7 @@ module Formulary
formula = begin
Formulary.from_contents name, @bottle_filename, contents, spec
rescue FormulaUnreadableError => e
opoo <<-EOS.undent
opoo <<~EOS
Unreadable formula in #{@bottle_filename}:
#{e}
EOS
@ -443,7 +443,7 @@ module Formulary
if possible_pinned_tap_formulae.size == 1
selected_formula = factory(possible_pinned_tap_formulae.first, spec)
if core_path(ref).file?
opoo <<-EOS.undent
opoo <<~EOS
#{ref} is provided by core, but is now shadowed by #{selected_formula.full_name}.
To refer to the core formula, use Homebrew/core/#{ref} instead.
EOS

View File

@ -32,7 +32,7 @@ class Gpg
def self.create_test_key(path)
odie "No GPG present to test against!" unless available?
(path/"batch.gpg").write <<-EOS.undent
(path/"batch.gpg").write <<~EOS
Key-Type: RSA
Key-Length: 2048
Subkey-Type: RSA

View File

@ -6,7 +6,7 @@ require "ostruct"
class Keg
class AlreadyLinkedError < RuntimeError
def initialize(keg)
super <<-EOS.undent
super <<~EOS
Cannot link #{keg.name}
Another version is already linked: #{keg.linked_keg_record.resolved_path}
EOS
@ -32,9 +32,9 @@ class Keg
rescue NotAKegError, Errno::ENOENT
"already exists. You may want to remove it:\n rm '#{dst}'\n"
else
<<-EOS.undent
is a symlink belonging to #{conflict.name}. You can unlink it:
brew unlink #{conflict.name}
<<~EOS
is a symlink belonging to #{conflict.name}. You can unlink it:
brew unlink #{conflict.name}
EOS
end
@ -42,7 +42,7 @@ class Keg
s = []
s << "Could not symlink #{src}"
s << "Target #{dst}" << suggestion
s << <<-EOS.undent
s << <<~EOS
To force the link and overwrite all conflicting files:
brew link --overwrite #{keg.name}
@ -54,7 +54,7 @@ class Keg
end
class DirectoryNotWritableError < LinkError
def to_s; <<-EOS.undent
def to_s; <<~EOS
Could not symlink #{src}
#{dst.dirname} is not writable.
EOS

View File

@ -46,7 +46,7 @@ module Language
end
def self.in_sys_path?(python, path)
script = <<-EOS.undent
script = <<~EOS
import os, sys
[os.path.realpath(p) for p in sys.path].index(os.path.realpath("#{path}"))
EOS
@ -54,7 +54,7 @@ module Language
end
def self.setup_install_args(prefix)
shim = <<-EOS.undent
shim = <<~EOS
import setuptools, tokenize
__file__ = 'setup.py'
exec(compile(getattr(tokenize, 'open', open)(__file__).read()

View File

@ -6,7 +6,7 @@ require "tab"
class Migrator
class MigrationNeededError < RuntimeError
def initialize(formula)
super <<-EOS.undent
super <<~EOS
#{formula.oldname} was renamed to #{formula.name} and needs to be migrated.
Please run `brew migrate #{formula.oldname}`
EOS
@ -33,10 +33,9 @@ class Migrator
"Please try to use fully-qualified #{tap}/#{formula.oldname} to refer the formula.\n"
end
super <<-EOS.undent
#{formula.name} from #{formula.tap} is given, but old name #{formula.oldname} was installed from #{tap ? tap : "path or url"}.
#{msg}To force migrate use `brew migrate --force #{formula.oldname}`.
super <<~EOS
#{formula.name} from #{formula.tap} is given, but old name #{formula.oldname} was installed from #{tap ? tap : "path or url"}.
#{msg}To force migrate use `brew migrate --force #{formula.oldname}`.
EOS
end
end

View File

@ -12,10 +12,10 @@ module Homebrew
def blacklisted_reason(name)
case name.downcase
when "gem", /^rubygems?$/ then <<-EOS.undent
when "gem", /^rubygems?$/ then <<~EOS
Homebrew provides gem via: `brew install ruby`.
EOS
when "tex", "tex-live", "texlive", "latex" then <<-EOS.undent
when "tex", "tex-live", "texlive", "latex" then <<~EOS
Installing TeX from source is weird and gross, requires a lot of patches,
and only builds 32-bit (and thus can't use Homebrew dependencies)
@ -24,42 +24,42 @@ module Homebrew
You can install it with Homebrew-Cask:
brew cask install mactex
EOS
when "pip" then <<-EOS.undent
when "pip" then <<~EOS
Homebrew provides pip via: `brew install python`. However you will then
have two Pythons installed on your Mac, so alternatively you can install
pip via the instructions at:
#{Formatter.url("https://pip.readthedocs.io/en/stable/installing/")}
EOS
when "pil" then <<-EOS.undent
when "pil" then <<~EOS
Instead of PIL, consider `pip2 install pillow`.
EOS
when "macruby" then <<-EOS.undent
when "macruby" then <<~EOS
MacRuby is not packaged and is on an indefinite development hiatus.
You can read more about it at:
#{Formatter.url("https://github.com/MacRuby/MacRuby")}
EOS
when /(lib)?lzma/
"lzma is now part of the xz formula."
when "gtest", "googletest", "google-test" then <<-EOS.undent
when "gtest", "googletest", "google-test" then <<~EOS
Installing gtest system-wide is not recommended; it should be vendored
in your projects that use it.
EOS
when "gmock", "googlemock", "google-mock" then <<-EOS.undent
when "gmock", "googlemock", "google-mock" then <<~EOS
Installing gmock system-wide is not recommended; it should be vendored
in your projects that use it.
EOS
when "sshpass" then <<-EOS.undent
when "sshpass" then <<~EOS
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.
EOS
when "gsutil" then <<-EOS.undent
when "gsutil" then <<~EOS
Install gsutil with `pip2 install gsutil`
EOS
when "gfortran" then <<-EOS.undent
when "gfortran" then <<~EOS
GNU Fortran is now provided as part of GCC, and can be installed with:
brew install gcc
EOS
when "play" then <<-EOS.undent
when "play" then <<~EOS
Play 2.3 replaces the play command with activator:
brew install typesafe-activator
@ -67,7 +67,7 @@ module Homebrew
#{Formatter.url("https://www.playframework.com/documentation/2.3.x/Migration23")}
#{Formatter.url("https://www.playframework.com/documentation/2.3.x/Highlights23")}
EOS
when "haskell-platform" then <<-EOS.undent
when "haskell-platform" then <<~EOS
We no longer package haskell-platform. Consider installing ghc
and cabal-install instead:
brew install ghc cabal-install
@ -75,10 +75,10 @@ module Homebrew
You can install with Homebrew-Cask:
brew cask install haskell-platform
EOS
when "mysqldump-secure" then <<-EOS.undent
when "mysqldump-secure" then <<~EOS
The creator of mysqldump-secure tried to game our popularity metrics.
EOS
when "ngrok" then <<-EOS.undent
when "ngrok" then <<~EOS
Upstream sunsetted 1.x in March 2016 and 2.x is not open-source.
If you wish to use the 2.x release you can install with Homebrew-Cask:
@ -98,12 +98,12 @@ module Homebrew
new_tap_user, new_tap_repo, = new_tap.split("/")
new_tap_name = "#{new_tap_user}/#{new_tap_repo}"
message = <<-EOS.undent
message = <<~EOS
It was migrated from #{old_tap} to #{new_tap}.
EOS
break if new_tap_name == CoreTap.instance.name
message += <<-EOS.undent
message += <<~EOS
You can access it again by running:
brew tap #{new_tap_name}
EOS
@ -124,7 +124,7 @@ module Homebrew
unless silent
ohai "Searching for a previously deleted formula..."
if (tap.path/".git/shallow").exist?
opoo <<-EOS.undent
opoo <<~EOS
#{tap} is shallow clone. To get complete history run:
git -C "$(brew --repo #{tap})" fetch --unshallow
@ -147,7 +147,7 @@ module Homebrew
commit_message.sub!(/ \(#(\d+)\)$/, " (#{tap.issues_url}/\\1)")
commit_message.gsub!(/(Closes|Fixes) #(\d+)/, "\\1 #{tap.issues_url}/\\2")
<<-EOS.undent
<<~EOS
#{name} was deleted from #{tap.name} in commit #{short_hash}:
#{commit_message}

View File

@ -208,7 +208,7 @@ module OS
send(:"#{method}_version") == build
end
rescue IndexError
onoe <<-EOS.undent
onoe <<~EOS
Homebrew doesn't know what compiler versions ship with your version
of Xcode (#{Xcode.version}). Please `brew update` and if that doesn't
help, file an issue with the output of `brew --config`:

View File

@ -5,7 +5,7 @@ class Keg
puts "Changing dylib ID of #{file}\n from #{file.dylib_id}\n to #{id}" if ARGV.debug?
MachO::Tools.change_dylib_id(file, id, strict: false)
rescue MachO::MachOError
onoe <<-EOS.undent
onoe <<~EOS
Failed changing dylib ID of #{file}
from #{file.dylib_id}
to #{id}
@ -19,7 +19,7 @@ class Keg
puts "Changing install name in #{file}\n from #{old}\n to #{new}" if ARGV.debug?
MachO::Tools.change_install_name(file, old, new, strict: false)
rescue MachO::MachOError
onoe <<-EOS.undent
onoe <<~EOS
Failed changing install name in #{file}
from #{old}
to #{new}

View File

@ -86,11 +86,11 @@ module OS
def update_instructions
if MacOS.version >= "10.9" && !OS::Mac.prerelease?
<<-EOS.undent
<<~EOS
Xcode can be updated from the App Store.
EOS
else
<<-EOS.undent
<<~EOS
Xcode can be updated from
https://developer.apple.com/download/more/
EOS
@ -199,11 +199,11 @@ module OS
def update_instructions
if MacOS.version >= "10.9"
<<-EOS.undent
<<~EOS
Update them from Software Update in the App Store.
EOS
elsif MacOS.version == "10.8" || MacOS.version == "10.7"
<<-EOS.undent
<<~EOS
The standalone package can be obtained from
https://developer.apple.com/download/more/
or it can be installed via Xcode's preferences.

View File

@ -139,7 +139,7 @@ class ExternalPatch
if patch_files.empty?
children = patch_dir.children
if children.length != 1 || !children.first.file?
raise MissingApplyError, <<-EOS.undent
raise MissingApplyError, <<~EOS
There should be exactly one patch file in the staging directory unless
the "apply" method was used one or more times in the patch-do block.
EOS

View File

@ -35,18 +35,16 @@ class Requirement
_, _, class_name = self.class.to_s.rpartition "::"
s = "#{class_name} unsatisfied!\n"
if cask
s += <<-EOS.undent
s += <<~EOS
You can install with Homebrew-Cask:
brew cask install #{cask}
brew cask install #{cask}
EOS
end
if download
s += <<-EOS.undent
s += <<~EOS
You can download from:
#{download}
#{download}
EOS
end
s

View File

@ -34,16 +34,16 @@ class XcodeRequirement < Requirement
def message
version = " #{@version}" if @version
message = <<-EOS.undent
message = <<~EOS
A full installation of Xcode.app#{version} is required to compile this software.
Installing just the Command Line Tools is not sufficient.
EOS
if MacOS.version >= :lion
message + <<-EOS.undent
message + <<~EOS
Xcode can be installed from the App Store.
EOS
else
message + <<-EOS.undent
message + <<~EOS
Xcode can be installed from #{Formatter.url("https://developer.apple.com/download/more/")}.
EOS
end
@ -83,7 +83,7 @@ class TeXRequirement < Requirement
satisfy { which("tex") || which("latex") }
def message
s = <<-EOS.undent
s = <<~EOS
A LaTeX distribution is required for Homebrew to install this formula.
Make sure that "/usr/texbin", or the location you installed it to, is in

View File

@ -13,16 +13,15 @@ class LanguageModuleRequirement < Requirement
satisfy(build_env: false) { quiet_system(*the_test) }
def message
s = <<-EOS.undent
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.undent
You may need to: `brew install #{@language}`
s += <<~EOS
You may need to: `brew install #{@language}`
EOS
end

View File

@ -11,7 +11,7 @@ class MaximumMacOSRequirement < Requirement
satisfy(build_env: false) { MacOS.version <= @version }
def message
<<-EOS.undent
<<~EOS
This formula either does not compile or function as expected on macOS
versions newer than #{@version.pretty_name} due to an upstream incompatibility.
EOS

View File

@ -6,7 +6,7 @@ class UnsignedKextRequirement < Requirement
satisfy(build_env: false) { MacOS.version < :yosemite }
def message
s = <<-EOS.undent
s = <<~EOS
Building this formula from source isn't possible due to OS X
Yosemite (10.10) and above's strict unsigned kext ban.
EOS

View File

@ -6,7 +6,7 @@ module RuboCop
module FormulaAudit
# This cop audits versioned Formulae for `conflicts_with`
class Conflicts < FormulaCop
MSG = <<-EOS.undent
MSG = <<~EOS.freeze
Versioned formulae should not use `conflicts_with`.
Use `keg_only :versioned_formula` instead.
EOS

View File

@ -167,19 +167,19 @@ module RuboCop
type_match && name_match
end
def_node_search :required_dependency?, <<-EOS.undent
def_node_search :required_dependency?, <<~EOS
(send nil :depends_on ({str sym} _))
EOS
def_node_search :required_dependency_name?, <<-EOS.undent
def_node_search :required_dependency_name?, <<~EOS
(send nil :depends_on ({str sym} %1))
EOS
def_node_search :dependency_type_hash_match?, <<-EOS.undent
def_node_search :dependency_type_hash_match?, <<~EOS
(hash (pair ({str sym} _) ({str sym} %1)))
EOS
def_node_search :dependency_name_hash_match?, <<-EOS.undent
def_node_search :dependency_name_hash_match?, <<~EOS
(hash (pair ({str sym} %1) ({str sym} _)))
EOS

View File

@ -29,7 +29,7 @@ module RuboCop
desc_length = "#{@formula_name}: #{string_content(desc)}".length
max_desc_length = 80
return if desc_length <= max_desc_length
problem <<-EOS.undent
problem <<~EOS
Description is too long. "name: desc" should be less than #{max_desc_length} characters.
Length is calculated as #{@formula_name} + desc. (currently #{desc_length})
EOS

View File

@ -109,7 +109,7 @@ module RuboCop
end
find_method_with_args(body_node, :skip_clean, :all) do
problem <<-EOS.undent.chomp
problem <<~EOS.chomp
`skip_clean :all` is deprecated; brew no longer strips symbols
Pass explicit paths to prevent Homebrew from removing empty folders.
EOS
@ -131,7 +131,7 @@ module RuboCop
end
# Node Pattern search for Language::Node
def_node_search :languageNodeModule?, <<-EOS.undent
def_node_search :languageNodeModule?, <<~EOS
(const (const nil :Language) :Node)
EOS
end

View File

@ -28,7 +28,7 @@ module RuboCop
gh_patch_param_pattern = %r{https?://github\.com/.+/.+/(?:commit|pull)/[a-fA-F0-9]*.(?:patch|diff)}
if regex_match_group(patch, gh_patch_param_pattern)
if patch_url !~ /\?full_index=\w+$/
problem <<-EOS.undent
problem <<~EOS
GitHub patches should use the full_index parameter:
#{patch_url}?full_index=1
EOS
@ -41,7 +41,7 @@ module RuboCop
%r{gist\.githubusercontent\.com/.+/raw}])
if regex_match_group(patch, gh_patch_patterns)
if patch_url !~ /[a-fA-F0-9]{40}/
problem <<-EOS.undent.chomp
problem <<~EOS.chomp
GitHub/Gist patches should specify a revision:
#{patch_url}
EOS
@ -50,7 +50,7 @@ module RuboCop
gh_patch_diff_pattern = %r{https?://patch-diff\.githubusercontent\.com/raw/(.+)/(.+)/pull/(.+)\.(?:diff|patch)}
if match_obj = regex_match_group(patch, gh_patch_diff_pattern)
problem <<-EOS.undent
problem <<~EOS
use GitHub pull request URLs:
https://github.com/#{match_obj[1]}/#{match_obj[2]}/pull/#{match_obj[3]}.patch
Rather than patch-diff:
@ -59,21 +59,21 @@ module RuboCop
end
if regex_match_group(patch, %r{macports/trunk})
problem <<-EOS.undent.chomp
problem <<~EOS.chomp
MacPorts patches should specify a revision instead of trunk:
#{patch_url}
EOS
end
if regex_match_group(patch, %r{^http://trac\.macports\.org})
problem <<-EOS.undent.chomp
problem <<~EOS.chomp
Patches from MacPorts Trac should be https://, not http:
#{patch_url}
EOS
end
return unless regex_match_group(patch, %r{^http://bugs\.debian\.org})
problem <<-EOS.undent.chomp
problem <<~EOS.chomp
Patches from Debian should be https://, not http:
#{patch_url}
EOS

View File

@ -104,7 +104,7 @@ module RuboCop
end
if url =~ %r{^https?://prdownloads\.}
problem <<-EOS.undent.chomp
problem <<~EOS.chomp
Don't use prdownloads in SourceForge urls (url is #{url}).
See: http://librelist.com/browser/homebrew/2011/1/12/prdownloads-is-bad/
EOS
@ -121,7 +121,7 @@ module RuboCop
# one out of the grab bag.
unsecure_deb_pattern = %r{^http://http\.debian\.net/debian/(.*)}i
audit_urls(urls, unsecure_deb_pattern) do |match, _|
problem <<-EOS.undent
problem <<~EOS
Please use a secure mirror for Debian URLs.
We recommend:
https://mirrors.ocf.berkeley.edu/debian/#{match[1]}
@ -176,7 +176,7 @@ module RuboCop
# Don't use GitHub codeload URLs
codeload_gh_pattern = %r{https?://codeload\.github\.com/(.+)/(.+)/(?:tar\.gz|zip)/(.+)}
audit_urls(urls, codeload_gh_pattern) do |match, url|
problem <<-EOS.undent
problem <<~EOS
Use GitHub archive URLs:
https://github.com/#{match[1]}/#{match[2]}/archive/#{match[3]}.tar.gz
Rather than codeload:

View File

@ -138,7 +138,7 @@ class Sandbox
end
class SandboxProfile
SEATBELT_ERB = <<-EOS.undent
SEATBELT_ERB = <<~EOS.freeze
(version 1)
(debug deny) ; log all denied operations to /var/log/system.log
<%= rules.join("\n") %>

View File

@ -267,7 +267,7 @@ class Tap
return if options[:clone_target]
return unless private?
return if quiet
puts <<-EOS.undent
puts <<~EOS
It looks like you tapped a private repository. To avoid entering your
credentials each time you update, you can use git HTTP credential
caching or issue the following command:

View File

@ -82,12 +82,12 @@ describe Hbc::Artifact::App, :cask do
describe "target is both writable and user-owned" do
it "overwrites the existing app" do
stdout = <<-EOS.undent
stdout = <<~EOS
==> Removing App '#{target_path}'.
==> Moving App 'Caffeine.app' to '#{target_path}'.
EOS
stderr = <<-EOS.undent
stderr = <<~EOS
Warning: It seems there is already an App at '#{target_path}'; overwriting.
EOS
@ -117,12 +117,12 @@ describe Hbc::Artifact::App, :cask do
expect(command).to receive(:run).with("/usr/bin/chflags", args: ["-R", "--", "000", target_path], must_succeed: false)
.and_call_original
stdout = <<-EOS.undent
stdout = <<~EOS
==> Removing App '#{target_path}'.
==> Moving App 'Caffeine.app' to '#{target_path}'.
EOS
stderr = <<-EOS.undent
stderr = <<~EOS
Warning: It seems there is already an App at '#{target_path}'; overwriting.
EOS
@ -162,12 +162,12 @@ describe Hbc::Artifact::App, :cask do
let(:force) { true }
it "overwrites the existing app" do
stdout = <<-EOS.undent
stdout = <<~EOS
==> Removing App '#{target_path}'.
==> Moving App 'Caffeine.app' to '#{target_path}'.
EOS
stderr = <<-EOS.undent
stderr = <<~EOS
Warning: It seems there is already an App at '#{target_path}'; overwriting.
EOS

View File

@ -29,7 +29,7 @@ describe Hbc::Artifact::Pkg, :cask do
file = double(path: Pathname.new("/tmp/choices.xml"))
expect(file).to receive(:write).with(<<-EOS.undent)
expect(file).to receive(:write).with(<<~EOS)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

View File

@ -61,7 +61,7 @@ describe Hbc::Artifact::App, :cask do
target_path_mini.mkpath
expect {
expect(install_phase).to output(<<-EOS.undent).to_stdout
expect(install_phase).to output(<<~EOS).to_stdout
==> Moving App 'Caffeine Pro.app' to '#{target_path_pro}'
EOS
}.to raise_error(Hbc::CaskError, "It seems there is already an App at '#{target_path_mini}'.")
@ -75,7 +75,7 @@ describe Hbc::Artifact::App, :cask do
target_path_pro.mkpath
expect {
expect(install_phase).to output(<<-EOS.undent).to_stdout
expect(install_phase).to output(<<~EOS).to_stdout
==> Moving App 'Caffeine Mini.app' to '#{target_path_mini}'
EOS
}.to raise_error(Hbc::CaskError, "It seems there is already an App at '#{target_path_pro}'.")

View File

@ -11,7 +11,7 @@ shared_examples "#uninstall_phase or #zap_phase" do
let(:launchctl_remove_cmd) { %w[/bin/launchctl remove my.fancy.package.service] }
let(:unknown_response) { "launchctl list returned unknown response\n" }
let(:service_info) do
<<-EOS.undent
<<~EOS
{
"LimitLoadToSessionType" = "Aqua";
"Label" = "my.fancy.package.service";

View File

@ -7,7 +7,7 @@ describe Hbc::CLI::Cat, :cask do
describe "given a basic Cask" do
let(:basic_cask_content) {
<<-EOS.undent
<<~EOS
cask 'basic-cask' do
version '1.2.3'
sha256 '8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b'

View File

@ -32,7 +32,7 @@ describe Hbc::CLI::Cleanup, :cask do
expect {
subject.run
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
==> Removing cached downloads for #{cask_token}
#{cached_downloads[0]}
==> This operation has freed approximately #{disk_usage_readable(cleanup_size)} of disk space.
@ -52,7 +52,7 @@ describe Hbc::CLI::Cleanup, :cask do
expect {
subject.run
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
==> Removing cached downloads
#{cached_download}
==> This operation has freed approximately #{disk_usage_readable(cleanup_size)} of disk space.
@ -70,7 +70,7 @@ describe Hbc::CLI::Cleanup, :cask do
expect {
subject.run
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
==> Removing cached downloads older than 10 days old
Nothing to do
EOS

View File

@ -28,7 +28,7 @@ describe Hbc::CLI::Create, :cask do
it "drops a template down for the specified Cask" do
described_class.run("new-cask")
template = File.read(Hbc::CaskLoader.path("new-cask"))
expect(template).to eq <<-EOS.undent
expect(template).to eq <<~EOS
cask 'new-cask' do
version ''
sha256 ''

View File

@ -8,7 +8,7 @@ describe Hbc::CLI::Info, :cask do
it "displays some nice info about the specified Cask" do
expect {
described_class.run("local-caffeine")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine: 1.2.3
http://example.com/local-caffeine
Not installed
@ -22,7 +22,7 @@ describe Hbc::CLI::Info, :cask do
describe "given multiple Casks" do
let(:expected_output) {
<<-EOS.undent
<<~EOS
local-caffeine: 1.2.3
http://example.com/local-caffeine
Not installed
@ -52,7 +52,7 @@ describe Hbc::CLI::Info, :cask do
it "should print caveats if the Cask provided one" do
expect {
described_class.run("with-caveats")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
with-caveats: 1.2.3
http://example.com/local-caffeine
Not installed
@ -78,7 +78,7 @@ describe Hbc::CLI::Info, :cask do
it 'should not print "Caveats" section divider if the caveats block has no output' do
expect {
described_class.run("with-conditional-caveats")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
with-conditional-caveats: 1.2.3
http://example.com/local-caffeine
Not installed
@ -93,7 +93,7 @@ describe Hbc::CLI::Info, :cask do
it "prints languages specified in the Cask" do
expect {
described_class.run("with-languages")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
with-languages: 1.2.3
http://example.com/local-caffeine
Not installed
@ -110,7 +110,7 @@ describe Hbc::CLI::Info, :cask do
it 'does not print "Languages" section divider if the languages block has no output' do
expect {
described_class.run("without-languages")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
without-languages: 1.2.3
http://example.com/local-caffeine
Not installed

View File

@ -6,7 +6,7 @@ describe Hbc::CLI::Install, :cask do
it_behaves_like "a command that handles invalid options"
it "displays the installation progress" do
output = Regexp.new <<-EOS.undent
output = Regexp.new <<~EOS
==> Downloading file:.*caffeine.zip
==> Verifying checksum for Cask local-caffeine
==> Installing Cask local-caffeine

View File

@ -12,7 +12,7 @@ describe Hbc::CLI::List, :cask do
expect {
described_class.run
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine
local-transmission
EOS
@ -31,7 +31,7 @@ describe Hbc::CLI::List, :cask do
expect {
described_class.run("--full-name")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine
local-transmission
third-party/tap/third-party-cask
@ -41,7 +41,7 @@ describe Hbc::CLI::List, :cask do
describe "lists versions" do
let(:casks) { ["local-caffeine", "local-transmission"] }
let(:expected_output) {
<<-EOS.undent
<<~EOS
local-caffeine 1.2.3
local-transmission 2.61
EOS
@ -78,7 +78,7 @@ describe Hbc::CLI::List, :cask do
expect {
described_class.run("local-transmission", "local-caffeine")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
==> Apps
#{Hbc.appdir.join("Transmission.app")} (#{Hbc.appdir.join("Transmission.app").abv})
==> Apps

View File

@ -23,7 +23,7 @@ describe Hbc::CLI::Outdated, :cask do
it "checks all the installed Casks when no token is provided" do
expect {
described_class.run
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
EOS
@ -32,7 +32,7 @@ describe Hbc::CLI::Outdated, :cask do
it "checks only the tokens specified in the command line" do
expect {
described_class.run("local-caffeine")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine (1.2.2) != 1.2.3
EOS
end
@ -40,7 +40,7 @@ describe Hbc::CLI::Outdated, :cask do
it 'ignores "auto_updates" and "latest" Casks even when their tokens are provided in the command line' do
expect {
described_class.run("local-caffeine", "auto-updates", "version-latest-string")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine (1.2.2) != 1.2.3
EOS
end
@ -54,7 +54,7 @@ describe Hbc::CLI::Outdated, :cask do
it "lists only the names (no versions) of the outdated Casks with --quiet" do
expect {
described_class.run("--verbose", "--quiet")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine
local-transmission
EOS
@ -65,7 +65,7 @@ describe Hbc::CLI::Outdated, :cask do
it 'includes the Casks with "auto_updates true" or "version latest" with --greedy' do
expect {
described_class.run("--greedy")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
auto-updates (2.57) != 2.61
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
@ -79,7 +79,7 @@ describe Hbc::CLI::Outdated, :cask do
expect {
described_class.run("--greedy")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
version-latest-string (latest) != latest

View File

@ -8,7 +8,7 @@ describe Hbc::CLI::Reinstall, :cask do
Hbc::Installer.new(caffeine).install
output = Regexp.new <<-EOS.undent
output = Regexp.new <<~EOS
==> Downloading file:.*caffeine.zip
Already downloaded: .*local-caffeine--1.2.3.zip
==> Verifying checksum for Cask local-caffeine

View File

@ -12,7 +12,7 @@ describe Hbc::CLI::Search, :cask do
expect {
Hbc::CLI::Search.run("local")
}.to output(<<-EOS.undent).to_stdout.as_tty
}.to output(<<~EOS).to_stdout.as_tty
==> Partial Matches
local-caffeine
local-transmission
@ -24,7 +24,7 @@ describe Hbc::CLI::Search, :cask do
expect {
Hbc::CLI::Search.run("local")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine
local-transmission
EOS
@ -35,7 +35,7 @@ describe Hbc::CLI::Search, :cask do
expect {
Hbc::CLI::Search.run("local")
}.to output(<<-EOS.undent).to_stdout
}.to output(<<~EOS).to_stdout
local-caffeine
local-transmission
EOS
@ -45,7 +45,7 @@ describe Hbc::CLI::Search, :cask do
it "shows that there are no Casks matching a search term that did not result in anything" do
expect {
Hbc::CLI::Search.run("foo-bar-baz")
}.to output(<<-EOS.undent).to_stdout.as_tty
}.to output(<<~EOS).to_stdout.as_tty
No Cask found for "foo-bar-baz".
EOS
end
@ -84,7 +84,7 @@ describe Hbc::CLI::Search, :cask do
it "accepts a regexp argument" do
expect {
Hbc::CLI::Search.run("/^local-c[a-z]ffeine$/")
}.to output(<<-EOS.undent).to_stdout.as_tty
}.to output(<<~EOS).to_stdout.as_tty
==> Regexp Matches
local-caffeine
EOS
@ -93,7 +93,7 @@ describe Hbc::CLI::Search, :cask do
it "returns both exact and partial matches" do
expect {
Hbc::CLI::Search.run("test-opera")
}.to output(<<-EOS.undent).to_stdout.as_tty
}.to output(<<~EOS).to_stdout.as_tty
==> Exact Match
test-opera
==> Partial Matches
@ -104,7 +104,7 @@ describe Hbc::CLI::Search, :cask do
it "does not search the Tap name" do
expect {
Hbc::CLI::Search.run("caskroom")
}.to output(<<-EOS.undent).to_stdout.as_tty
}.to output(<<~EOS).to_stdout.as_tty
No Cask found for "caskroom".
EOS
end

View File

@ -10,7 +10,7 @@ describe Hbc::CLI::Uninstall, :cask do
Hbc::Installer.new(caffeine).install
output = Regexp.new <<-EOS.undent
output = Regexp.new <<~EOS
==> Uninstalling Cask local-caffeine
==> Removing App '.*Caffeine.app'.
EOS
@ -107,7 +107,7 @@ describe Hbc::CLI::Uninstall, :cask do
timestamped_versions.each do |timestamped_version|
caskroom_path.join(".metadata", *timestamped_version, "Casks").tap(&:mkpath)
.join("#{token}.rb").open("w") do |caskfile|
caskfile.puts <<-EOS.undent
caskfile.puts <<~EOS
cask '#{token}' do
version '#{timestamped_version[0]}'
end
@ -153,7 +153,7 @@ describe Hbc::CLI::Uninstall, :cask do
saved_caskfile.dirname.mkpath
IO.write saved_caskfile, <<-EOS.undent
IO.write saved_caskfile, <<~EOS
cask 'ive-been-renamed' do
version :latest

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