Merge pull request #3319 from reitermarkus/squiggly-heredocs
Use “squiggly” heredocs.
This commit is contained in:
		
						commit
						76cd7c7949
					
				@ -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:
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ module Hbc
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.template(cask_token)
 | 
			
		||||
        <<-EOS.undent
 | 
			
		||||
        <<~EOS
 | 
			
		||||
          cask '#{cask_token}' do
 | 
			
		||||
            version ''
 | 
			
		||||
            sha256 ''
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
HOMEBREW_HELP = <<-EOS.unindent.freeze
 | 
			
		||||
HOMEBREW_HELP = <<~EOS.freeze
 | 
			
		||||
  Example usage:
 | 
			
		||||
    brew search [TEXT|/REGEX/]
 | 
			
		||||
    brew (info|home|options) [FORMULA...]
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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}.
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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:
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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).
 | 
			
		||||
 | 
			
		||||
@ -26,3 +26,4 @@ require "compat/ENV/shared"
 | 
			
		||||
require "compat/ENV/std"
 | 
			
		||||
require "compat/ENV/super"
 | 
			
		||||
require "compat/utils/shell"
 | 
			
		||||
require "compat/extend/string"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								Library/Homebrew/compat/extend/string.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Library/Homebrew/compat/extend/string.rb
									
									
									
									
									
										Normal 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
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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!
 | 
			
		||||
 | 
			
		||||
@ -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'!
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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  ")}
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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}" : "."}
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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>
 | 
			
		||||
 | 
			
		||||
@ -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:
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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`:
 | 
			
		||||
 | 
			
		||||
@ -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}
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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:
 | 
			
		||||
 | 
			
		||||
@ -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") %>
 | 
			
		||||
 | 
			
		||||
@ -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:
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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">
 | 
			
		||||
 | 
			
		||||
@ -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}'.")
 | 
			
		||||
 | 
			
		||||
@ -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";
 | 
			
		||||
 | 
			
		||||
@ -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'
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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 ''
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user