diff options
Diffstat (limited to 'Library/Homebrew')
32 files changed, 324 insertions, 377 deletions
diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 0a6dd5a46..8a8323252 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -203,13 +203,12 @@ module Homebrew          # If they haven't updated in 48 hours (172800 seconds), that          # might explain the error          master = HOMEBREW_REPOSITORY/".git/refs/heads/master" -        if master.exist? && (Time.now.to_i - File.mtime(master).to_i) > 172800 -          ohai "You haven't updated Homebrew in a while." -          puts <<-EOS.undent -            A formula for #{e.name} might have been added recently. -            Run `brew update` to get the latest Homebrew updates! -          EOS -        end +        return unless master.exist? && (Time.now.to_i - File.mtime(master).to_i) > 172800 +        ohai "You haven't updated Homebrew in a while." +        puts <<-EOS.undent +          A formula for #{e.name} might have been added recently. +          Run `brew update` to get the latest Homebrew updates! +        EOS        end      end    end diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 1e9c8ccd3..18f2f370c 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -549,11 +549,10 @@ class ReporterHub        end      end -    unless formulae.empty? -      # Dump formula list. -      ohai title -      puts_columns(formulae) -    end +    return if formulae.empty? +    # Dump formula list. +    ohai title +    puts_columns(formulae)    end    def installed?(formula) diff --git a/Library/Homebrew/dependency_collector.rb b/Library/Homebrew/dependency_collector.rb index 0b35e7fb4..56463fa29 100644 --- a/Library/Homebrew/dependency_collector.rb +++ b/Library/Homebrew/dependency_collector.rb @@ -128,11 +128,11 @@ class DependencyCollector    end    def parse_class_spec(spec, tags) -    if spec < Requirement -      spec.new(tags) -    else +    unless spec < Requirement        raise TypeError, "#{spec.inspect} is not a Requirement subclass"      end + +    spec.new(tags)    end    def ant_dep(spec, tags) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 61d136daf..1a6e47dbe 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -284,9 +284,8 @@ class FormulaAuditor        problem "Should not have both `head` and `head do`"      end -    if present.include?("bottle modifier") && present.include?("bottle block") -      problem "Should not have `bottle :unneeded/:disable` and `bottle do`" -    end +    return unless present.include?("bottle modifier") && present.include?("bottle block") +    problem "Should not have `bottle :unneeded/:disable` and `bottle do`"    end    def audit_class @@ -350,9 +349,8 @@ class FormulaAuditor      same_name_tap_formulae.delete(full_name) -    unless same_name_tap_formulae.empty? -      problem "Formula name conflicts with #{same_name_tap_formulae.join ", "}" -    end +    return if same_name_tap_formulae.empty? +    problem "Formula name conflicts with #{same_name_tap_formulae.join ", "}"    end    def audit_deps @@ -485,9 +483,8 @@ class FormulaAuditor        problem "Description shouldn't start with an indefinite article (#{$1})"      end -    if desc.downcase.start_with? "#{formula.name} " -      problem "Description shouldn't include the formula name" -    end +    return unless desc.downcase.start_with? "#{formula.name} " +    problem "Description shouldn't include the formula name"    end    def audit_homepage @@ -564,9 +561,9 @@ class FormulaAuditor    end    def audit_bottle_spec -    if formula.bottle_disabled? && !formula.bottle_disable_reason.valid? -      problem "Unrecognized bottle modifier" -    end +    return unless formula.bottle_disabled? +    return if formula.bottle_disable_reason.valid? +    problem "Unrecognized bottle modifier"    end    def audit_github_repository @@ -594,9 +591,8 @@ class FormulaAuditor        problem "GitHub repository not notable enough (<20 forks, <20 watchers and <50 stars)"      end -    if Date.parse(metadata["created_at"]) > (Date.today - 30) -      problem "GitHub repository too new (<30 days old)" -    end +    return if Date.parse(metadata["created_at"]) <= (Date.today - 30) +    problem "GitHub repository too new (<30 days old)"    end    def audit_specs @@ -736,9 +732,8 @@ class FormulaAuditor        problem "Please set plist_options when using a formula-defined plist."      end -    if text.include?('require "language/go"') && !text.include?("go_resource") -      problem "require \"language/go\" is unnecessary unless using `go_resource`s" -    end +    return unless text.include?('require "language/go"') && !text.include?("go_resource") +    problem "require \"language/go\" is unnecessary unless using `go_resource`s"    end    def audit_line(line, lineno) @@ -983,9 +978,8 @@ class FormulaAuditor        problem "Use \#{pkgshare} instead of \#{share}/#{formula.name}"      end -    if line =~ %r{share(\s*[/+]\s*)(['"])#{Regexp.escape(formula.name)}(?:\2|/)} -      problem "Use pkgshare instead of (share#{$1}\"#{formula.name}\")" -    end +    return unless line =~ %r{share(\s*[/+]\s*)(['"])#{Regexp.escape(formula.name)}(?:\2|/)} +    problem "Use pkgshare instead of (share#{$1}\"#{formula.name}\")"    end    def audit_caveats @@ -1115,9 +1109,8 @@ class ResourceAuditor        problem "version #{version} should not have a leading 'v'"      end -    if version.to_s =~ /_\d+$/ -      problem "version #{version} should not end with an underline and a number" -    end +    return unless version.to_s =~ /_\d+$/ +    problem "version #{version} should not end with an underline and a number"    end    def audit_checksum @@ -1183,9 +1176,8 @@ class ResourceAuditor        end      end -    if url_strategy == DownloadStrategyDetector.detect("", using) -      problem "Redundant :using value in URL" -    end +    return unless url_strategy == DownloadStrategyDetector.detect("", using) +    problem "Redundant :using value in URL"    end    def audit_urls diff --git a/Library/Homebrew/dev-cmd/pull.rb b/Library/Homebrew/dev-cmd/pull.rb index b06719fb1..857c55993 100644 --- a/Library/Homebrew/dev-cmd/pull.rb +++ b/Library/Homebrew/dev-cmd/pull.rb @@ -531,19 +531,19 @@ module Homebrew              req = Net::HTTP::Head.new bottle_info.url              req.initialize_http_header "User-Agent" => HOMEBREW_USER_AGENT_RUBY              res = http.request req -            if res.is_a?(Net::HTTPSuccess) -              break -            elsif res.is_a?(Net::HTTPClientError) -              if retry_count >= max_retries -                raise "Failed to find published #{f} bottle at #{url}!" -              end -              print(wrote_dots ? "." : "Waiting on Bintray.") -              wrote_dots = true -              sleep poll_retry_delay_seconds -              retry_count += 1 -            else +            break if res.is_a?(Net::HTTPSuccess) + +            unless res.is_a?(Net::HTTPClientError)                raise "Failed to find published #{f} bottle at #{url} (#{res.code} #{res.message})!"              end + +            if retry_count >= max_retries +              raise "Failed to find published #{f} bottle at #{url}!" +            end +            print(wrote_dots ? "." : "Waiting on Bintray.") +            wrote_dots = true +            sleep poll_retry_delay_seconds +            retry_count += 1            end          end diff --git a/Library/Homebrew/dev-cmd/test-bot.rb b/Library/Homebrew/dev-cmd/test-bot.rb index abf0235e5..935a40731 100644 --- a/Library/Homebrew/dev-cmd/test-bot.rb +++ b/Library/Homebrew/dev-cmd/test-bot.rb @@ -123,13 +123,12 @@ module Homebrew        end      end -    if git_url = ENV["UPSTREAM_GIT_URL"] || ENV["GIT_URL"] -      # Also can get tap from Jenkins GIT_URL. -      url_path = git_url.sub(%r{^https?://github\.com/}, "").chomp("/").sub(/\.git$/, "") -      begin -        return Tap.fetch(url_path) if url_path =~ HOMEBREW_TAP_REGEX -      rescue -      end +    return unless git_url = ENV["UPSTREAM_GIT_URL"] || ENV["GIT_URL"] +    # Also can get tap from Jenkins GIT_URL. +    url_path = git_url.sub(%r{^https?://github\.com/}, "").chomp("/").sub(/\.git$/, "") +    begin +      return Tap.fetch(url_path) if url_path =~ HOMEBREW_TAP_REGEX +    rescue      end    end @@ -1001,10 +1000,9 @@ module Homebrew        end      end -    if git_tag -      safe_system "git", "tag", "--force", git_tag -      safe_system "git", "push", "--force", remote, "master:master", "refs/tags/#{git_tag}" -    end +    return unless git_tag +    safe_system "git", "tag", "--force", git_tag +    safe_system "git", "push", "--force", remote, "master:master", "refs/tags/#{git_tag}"    end    def sanitize_argv_and_env @@ -1053,13 +1051,12 @@ module Homebrew      ARGV << "--fast" if ARGV.include?("--ci-master") -    if ARGV.include? "--local" -      ENV["HOMEBREW_CACHE"] = "#{ENV["HOME"]}/Library/Caches/Homebrew" -      mkdir_p ENV["HOMEBREW_CACHE"] -      ENV["HOMEBREW_HOME"] = ENV["HOME"] = "#{Dir.pwd}/home" -      mkdir_p ENV["HOME"] -      ENV["HOMEBREW_LOGS"] = "#{Dir.pwd}/logs" -    end +    return unless ARGV.include?("--local") +    ENV["HOMEBREW_CACHE"] = "#{ENV["HOME"]}/Library/Caches/Homebrew" +    mkdir_p ENV["HOMEBREW_CACHE"] +    ENV["HOMEBREW_HOME"] = ENV["HOME"] = "#{Dir.pwd}/home" +    mkdir_p ENV["HOME"] +    ENV["HOMEBREW_LOGS"] = "#{Dir.pwd}/logs"    end    def test_bot diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index b852c1d5f..687e14396 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -158,14 +158,13 @@ class VCSDownloadStrategy < AbstractDownloadStrategy      version.update_commit(last_commit) if head? -    if @ref_type == :tag && @revision && current_revision -      unless current_revision == @revision -        raise <<-EOS.undent -          #{@ref} tag should be #{@revision} -          but is actually #{current_revision} -        EOS -      end -    end +    return unless @ref_type == :tag +    return unless @revision && current_revision +    return if current_revision == @revision +    raise <<-EOS.undent +      #{@ref} tag should be #{@revision} +      but is actually #{current_revision} +    EOS    end    def fetch_last_commit @@ -336,14 +335,14 @@ class CurlDownloadStrategy < AbstractFileDownloadStrategy        rescue ErrorDuringExecution          # 33 == range not supported          # try wiping the incomplete download and retrying once -        if $?.exitstatus == 33 && had_incomplete_download -          ohai "Trying a full download" -          temporary_path.unlink -          had_incomplete_download = false -          retry -        else +        unless $?.exitstatus == 33 && had_incomplete_download            raise CurlDownloadStrategyError, @url          end + +        ohai "Trying a full download" +        temporary_path.unlink +        had_incomplete_download = false +        retry        end        ignore_interrupts { temporary_path.rename(cached_location) }      end @@ -717,12 +716,12 @@ class GitDownloadStrategy < VCSDownloadStrategy    end    def update_repo -    if @ref_type == :branch || !ref? -      if !shallow_clone? && shallow_dir? -        quiet_safe_system "git", "fetch", "origin", "--unshallow" -      else -        quiet_safe_system "git", "fetch", "origin" -      end +    return unless @ref_type == :branch || !ref? + +    if !shallow_clone? && shallow_dir? +      quiet_safe_system "git", "fetch", "origin", "--unshallow" +    else +      quiet_safe_system "git", "fetch", "origin"      end    end @@ -798,10 +797,10 @@ end  class GitHubGitDownloadStrategy < GitDownloadStrategy    def initialize(name, resource)      super -    if @url =~ %r{^https?://github\.com/([^/]+)/([^/]+)\.git$} -      @user = $1 -      @repo = $2 -    end + +    return unless %r{^https?://github\.com/(?<user>[^/]+)/(?<repo>[^/]+)\.git$} =~ @url +    @user = user +    @repo = repo    end    def github_last_commit diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 92b4cb898..ecd50ce06 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -88,11 +88,11 @@ module HomebrewArgvExtension              Formulary.from_rack(rack)            end -          if (prefix = f.installed_prefix).directory? -            Keg.new(prefix) -          else +          unless (prefix = f.installed_prefix).directory?              raise MultipleVersionsInstalledError, rack.basename            end + +          Keg.new(prefix)          end        rescue FormulaUnavailableError          raise <<-EOS.undent diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index 447e4dd29..909dc4f94 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -289,12 +289,11 @@ module SharedEnvExtension        EOS      end -    unless gcc_formula.opt_prefix.exist? -      raise <<-EOS.undent -      The requested Homebrew GCC was not installed. You must: -        brew install #{gcc_formula.full_name} -      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} +    EOS    end    def permit_arch_flags; end @@ -328,9 +327,8 @@ module SharedEnvExtension    end    def check_for_compiler_universal_support -    if homebrew_cc =~ GNU_GCC_REGEXP -      raise "Non-Apple GCC can't build universal binaries" -    end +    return unless homebrew_cc =~ GNU_GCC_REGEXP +    raise "Non-Apple GCC can't build universal binaries"    end    def gcc_with_cxx11_support?(cc) diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index 68bc9499d..b56aa56f3 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -48,10 +48,9 @@ module Stdenv      send(compiler) -    if cc =~ GNU_GCC_REGEXP -      gcc_formula = gcc_version_formula($&) -      append_path "PATH", gcc_formula.opt_bin.to_s -    end +    return unless cc =~ GNU_GCC_REGEXP +    gcc_formula = gcc_version_formula($&) +    append_path "PATH", gcc_formula.opt_bin.to_s    end    alias generic_setup_build_environment setup_build_environment @@ -174,10 +173,10 @@ module Stdenv      append_to_cflags Hardware::CPU.universal_archs.as_arch_flags      append "LDFLAGS", Hardware::CPU.universal_archs.as_arch_flags -    if compiler != :clang && Hardware.is_32_bit? -      # Can't mix "-march" for a 32-bit CPU  with "-arch x86_64" -      replace_in_cflags(/-march=\S*/, "-Xarch_#{Hardware::CPU.arch_32_bit} \\0") -    end +    return if compiler == :clang +    return unless Hardware.is_32_bit? +    # Can't mix "-march" for a 32-bit CPU  with "-arch x86_64" +    replace_in_cflags(/-march=\S*/, "-Xarch_#{Hardware::CPU.arch_32_bit} \\0")    end    def cxx11 diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index 1c0271685..a3837c695 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -276,12 +276,12 @@ module Superenv      self["HOMEBREW_ARCHFLAGS"] = Hardware::CPU.universal_archs.as_arch_flags      # GCC doesn't accept "-march" for a 32-bit CPU with "-arch x86_64" -    if compiler != :clang && Hardware::CPU.is_32_bit? -      self["HOMEBREW_OPTFLAGS"] = self["HOMEBREW_OPTFLAGS"].sub( -        /-march=\S*/, -        "-Xarch_#{Hardware::CPU.arch_32_bit} \\0" -      ) -    end +    return if compiler == :clang +    return unless Hardware::CPU.is_32_bit? +    self["HOMEBREW_OPTFLAGS"] = self["HOMEBREW_OPTFLAGS"].sub( +      /-march=\S*/, +      "-Xarch_#{Hardware::CPU.arch_32_bit} \\0" +    )    end    def permit_arch_flags diff --git a/Library/Homebrew/extend/fileutils.rb b/Library/Homebrew/extend/fileutils.rb index b889f9ded..8b8d21da4 100644 --- a/Library/Homebrew/extend/fileutils.rb +++ b/Library/Homebrew/extend/fileutils.rb @@ -89,10 +89,9 @@ module FileUtils    # A version of mkdir that also changes to that folder in a block.    def mkdir(name, &_block)      old_mkdir(name) -    if block_given? -      chdir name do -        yield -      end +    return unless block_given? +    chdir name do +      yield      end    end    module_function :mkdir diff --git a/Library/Homebrew/extend/os/mac/extend/ENV/std.rb b/Library/Homebrew/extend/os/mac/extend/ENV/std.rb index 8efbd3bc9..4853ecf0c 100644 --- a/Library/Homebrew/extend/os/mac/extend/ENV/std.rb +++ b/Library/Homebrew/extend/os/mac/extend/ENV/std.rb @@ -20,14 +20,13 @@ module Stdenv      # Leopard's ld needs some convincing that it's building 64-bit      # See: https://github.com/mistydemeo/tigerbrew/issues/59 -    if MacOS.version == :leopard && MacOS.prefer_64_bit? -      append "LDFLAGS", "-arch #{Hardware::CPU.arch_64_bit}" +    return unless MacOS.version == :leopard && MacOS.prefer_64_bit? +    append "LDFLAGS", "-arch #{Hardware::CPU.arch_64_bit}" -      # Many, many builds are broken thanks to Leopard's buggy ld. -      # Our ld64 fixes many of those builds, though of course we can't -      # depend on it already being installed to build itself. -      ld64 if Formula["ld64"].installed? -    end +    # Many, many builds are broken thanks to Leopard's buggy ld. +    # Our ld64 fixes many of those builds, though of course we can't +    # depend on it already being installed to build itself. +    ld64 if Formula["ld64"].installed?    end    def homebrew_extra_pkg_config_paths @@ -65,19 +64,18 @@ module Stdenv      delete("CPATH")      remove "LDFLAGS", "-L#{HOMEBREW_PREFIX}/lib" -    if (sdk = MacOS.sdk_path(version)) && !MacOS::CLT.installed? -      delete("SDKROOT") -      remove_from_cflags "-isysroot #{sdk}" -      remove "CPPFLAGS", "-isysroot #{sdk}" -      remove "LDFLAGS", "-isysroot #{sdk}" -      if HOMEBREW_PREFIX.to_s == "/usr/local" -        delete("CMAKE_PREFIX_PATH") -      else -        # It was set in setup_build_environment, so we have to restore it here. -        self["CMAKE_PREFIX_PATH"] = HOMEBREW_PREFIX.to_s -      end -      remove "CMAKE_FRAMEWORK_PATH", "#{sdk}/System/Library/Frameworks" +    return unless (sdk = MacOS.sdk_path(version)) && !MacOS::CLT.installed? +    delete("SDKROOT") +    remove_from_cflags "-isysroot #{sdk}" +    remove "CPPFLAGS", "-isysroot #{sdk}" +    remove "LDFLAGS", "-isysroot #{sdk}" +    if HOMEBREW_PREFIX.to_s == "/usr/local" +      delete("CMAKE_PREFIX_PATH") +    else +      # It was set in setup_build_environment, so we have to restore it here. +      self["CMAKE_PREFIX_PATH"] = HOMEBREW_PREFIX.to_s      end +    remove "CMAKE_FRAMEWORK_PATH", "#{sdk}/System/Library/Frameworks"    end    def macosxsdk(version = MacOS.version) @@ -89,20 +87,19 @@ module Stdenv      self["CPATH"] = "#{HOMEBREW_PREFIX}/include"      prepend "LDFLAGS", "-L#{HOMEBREW_PREFIX}/lib" -    if (sdk = MacOS.sdk_path(version)) && !MacOS::CLT.installed? -      # Extra setup to support Xcode 4.3+ without CLT. -      self["SDKROOT"] = sdk -      # Tell clang/gcc where system include's are: -      append_path "CPATH", "#{sdk}/usr/include" -      # The -isysroot is needed, too, because of the Frameworks -      append_to_cflags "-isysroot #{sdk}" -      append "CPPFLAGS", "-isysroot #{sdk}" -      # And the linker needs to find sdk/usr/lib -      append "LDFLAGS", "-isysroot #{sdk}" -      # Needed to build cmake itself and perhaps some cmake projects: -      append_path "CMAKE_PREFIX_PATH", "#{sdk}/usr" -      append_path "CMAKE_FRAMEWORK_PATH", "#{sdk}/System/Library/Frameworks" -    end +    return unless (sdk = MacOS.sdk_path(version)) && !MacOS::CLT.installed? +    # Extra setup to support Xcode 4.3+ without CLT. +    self["SDKROOT"] = sdk +    # Tell clang/gcc where system include's are: +    append_path "CPATH", "#{sdk}/usr/include" +    # The -isysroot is needed, too, because of the Frameworks +    append_to_cflags "-isysroot #{sdk}" +    append "CPPFLAGS", "-isysroot #{sdk}" +    # And the linker needs to find sdk/usr/lib +    append "LDFLAGS", "-isysroot #{sdk}" +    # Needed to build cmake itself and perhaps some cmake projects: +    append_path "CMAKE_PREFIX_PATH", "#{sdk}/usr" +    append_path "CMAKE_FRAMEWORK_PATH", "#{sdk}/System/Library/Frameworks"    end    # Some configure scripts won't find libxml2 without help diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb index b3f8250ee..8bc42ad35 100644 --- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb @@ -64,13 +64,12 @@ module FormulaCellarChecks      keg = Keg.new(formula.prefix)      checker = LinkageChecker.new(keg, formula) -    if checker.broken_dylibs? -      audit_check_output <<-EOS.undent -        The installation was broken. -        Broken dylib links found: -          #{checker.broken_dylibs.to_a * "\n          "} -      EOS -    end +    return unless checker.broken_dylibs? +    audit_check_output <<-EOS.undent +      The installation was broken. +      Broken dylib links found: +        #{checker.broken_dylibs.to_a * "\n          "} +    EOS    end    def audit_installed diff --git a/Library/Homebrew/extend/os/mac/utils/bottles.rb b/Library/Homebrew/extend/os/mac/utils/bottles.rb index accfc6a59..0dd7341ea 100644 --- a/Library/Homebrew/extend/os/mac/utils/bottles.rb +++ b/Library/Homebrew/extend/os/mac/utils/bottles.rb @@ -31,10 +31,9 @@ module Utils        # sometimes a formula has just :tiger_altivec, other times it has        # :tiger_g4, :tiger_g5, etc.        def find_altivec_tag(tag) -        if tag.to_s =~ /(\w+)_(g4|g4e|g5)$/ -          altivec_tag = "#{$1}_altivec".to_sym -          altivec_tag if key?(altivec_tag) -        end +        return unless tag.to_s =~ /(\w+)_(g4|g4e|g5)$/ +        altivec_tag = "#{$1}_altivec".to_sym +        altivec_tag if key?(altivec_tag)        end        # Allows a bottle tag to specify a specific OS or later, diff --git a/Library/Homebrew/extend/string.rb b/Library/Homebrew/extend/string.rb index bd5994fe1..162666d2d 100644 --- a/Library/Homebrew/extend/string.rb +++ b/Library/Homebrew/extend/string.rb @@ -59,9 +59,8 @@ module StringInreplaceExtension    # Looks for Makefile style variable defintions and replaces the    # value with "new_value", or removes the definition entirely.    def change_make_var!(flag, new_value) -    unless gsub!(/^#{Regexp.escape(flag)}[ \t]*=[ \t]*(.*)$/, "#{flag}=#{new_value}", false) -      errors << "expected to change #{flag.inspect} to #{new_value.inspect}" -    end +    return if gsub!(/^#{Regexp.escape(flag)}[ \t]*=[ \t]*(.*)$/, "#{flag}=#{new_value}", false) +    errors << "expected to change #{flag.inspect} to #{new_value.inspect}"    end    # Removes variable assignments completely. diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index b9deb3a67..78dbc6940 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -224,10 +224,9 @@ class Formula    def set_spec(name)      spec = self.class.send(name) -    if spec.url -      spec.owner = self -      instance_variable_set("@#{name}", spec) -    end +    return unless spec.url +    spec.owner = self +    instance_variable_set("@#{name}", spec)    end    def determine_active_spec(requested) @@ -246,9 +245,8 @@ class Formula      end      val = version.respond_to?(:to_str) ? version.to_str : version -    if val.nil? || val.empty? || val =~ /\s/ -      raise FormulaValidationError.new(full_name, :version, val) -    end +    return unless val.nil? || val.empty? || val =~ /\s/ +    raise FormulaValidationError.new(full_name, :version, val)    end    public @@ -1065,10 +1063,9 @@ class Formula    # @private    def patch -    unless patchlist.empty? -      ohai "Patching" -      patchlist.each(&:apply) -    end +    return if patchlist.empty? +    ohai "Patching" +    patchlist.each(&:apply)    end    # yields |self,staging| with current working directory set to the uncompressed tarball @@ -1094,10 +1091,11 @@ class Formula    def lock      @lock = FormulaLock.new(name)      @lock.lock -    if oldname && (oldname_rack = HOMEBREW_CELLAR/oldname).exist? && oldname_rack.resolved_path == rack -      @oldname_lock = FormulaLock.new(oldname) -      @oldname_lock.lock -    end +    return unless oldname +    return unless (oldname_rack = HOMEBREW_CELLAR/oldname).exist? +    return unless oldname_rack.resolved_path == rack +    @oldname_lock = FormulaLock.new(oldname) +    @oldname_lock.lock    end    # @private @@ -1427,10 +1425,9 @@ class Formula    # @private    def print_tap_action(options = {}) -    if tap? -      verb = options[:verb] || "Installing" -      ohai "#{verb} #{name} from #{tap}" -    end +    return unless tap? +    verb = options[:verb] || "Installing" +    ohai "#{verb} #{name} from #{tap}"    end    # @private diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 6e8f2e3b7..3738c3784 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -133,12 +133,10 @@ class FormulaInstaller      begin        compute_dependencies      rescue TapFormulaUnavailableError => e -      if e.tap.installed? -        raise -      else -        e.tap.install -        retry -      end +      raise if e.tap.installed? + +      e.tap.install +      retry      end    rescue FormulaUnavailableError => e      e.dependent = formula.full_name @@ -148,23 +146,24 @@ class FormulaInstaller    def check_install_sanity      raise FormulaInstallationAlreadyAttemptedError, formula if @@attempted.include?(formula) -    unless skip_deps_check? -      recursive_deps = formula.recursive_dependencies -      unlinked_deps = recursive_deps.map(&:to_formula).select do |dep| -        dep.installed? && !dep.keg_only? && !dep.linked_keg.directory? -      end -      raise CannotInstallFormulaError, -        "You must `brew link #{unlinked_deps*" "}` before #{formula.full_name} can be installed" unless unlinked_deps.empty? +    return if skip_deps_check? -      pinned_unsatisfied_deps = recursive_deps.select do |dep| -        dep.to_formula.pinned? && !dep.satisfied?(inherited_options_for(dep)) -      end +    recursive_deps = formula.recursive_dependencies +    unlinked_deps = recursive_deps.map(&:to_formula).select do |dep| +      dep.installed? && !dep.keg_only? && !dep.linked_keg.directory? +    end -      unless pinned_unsatisfied_deps.empty? -        raise CannotInstallFormulaError, -          "You must `brew unpin #{pinned_unsatisfied_deps*" "}` as installing #{formula.full_name} requires the latest version of pinned dependencies" -      end +    unless unlinked_deps.empty? +      raise CannotInstallFormulaError, "You must `brew link #{unlinked_deps*" "}` before #{formula.full_name} can be installed" +    end + +    pinned_unsatisfied_deps = recursive_deps.select do |dep| +      dep.to_formula.pinned? && !dep.satisfied?(inherited_options_for(dep))      end + +    return if pinned_unsatisfied_deps.empty? +    raise CannotInstallFormulaError, +      "You must `brew unpin #{pinned_unsatisfied_deps*" "}` as installing #{formula.full_name} requires the latest version of pinned dependencies"    end    def build_bottle_preinstall @@ -285,11 +284,10 @@ class FormulaInstaller            #{formula}: #{e.message}            'conflicts_with \"#{c.name}\"' should be removed from #{formula.path.basename}.          EOS -        if ARGV.homebrew_developer? -          raise -        else -          $stderr.puts "Please report this to the #{formula.tap} tap!" -        end + +        raise if ARGV.homebrew_developer? + +        $stderr.puts "Please report this to the #{formula.tap} tap!"          false        else          f.linked_keg.exist? && f.opt_prefix.exist? @@ -492,10 +490,9 @@ class FormulaInstaller      c = Caveats.new(formula) -    unless c.empty? -      @show_summary_heading = true -      ohai "Caveats", c.caveats -    end +    return if c.empty? +    @show_summary_heading = true +    ohai "Caveats", c.caveats    end    def finish @@ -706,13 +703,12 @@ class FormulaInstaller        raise      end -    unless link_overwrite_backup.empty? -      opoo "These files were overwritten during `brew link` step:" -      puts link_overwrite_backup.keys -      puts -      puts "They have been backed up in #{backup_dir}" -      @show_summary_heading = true -    end +    return if link_overwrite_backup.empty? +    opoo "These files were overwritten during `brew link` step:" +    puts link_overwrite_backup.keys +    puts +    puts "They have been backed up in #{backup_dir}" +    @show_summary_heading = true    end    def install_plist @@ -804,10 +800,9 @@ class FormulaInstaller    end    def audit_check_output(output) -    if output -      opoo output -      @show_summary_heading = true -    end +    return unless output +    opoo output +    @show_summary_heading = true    end    def audit_installed @@ -823,22 +818,20 @@ class FormulaInstaller    end    def lock -    if (@@locked ||= []).empty? -      formula.recursive_dependencies.each do |dep| -        @@locked << dep.to_formula -      end unless ignore_deps? -      @@locked.unshift(formula) -      @@locked.uniq! -      @@locked.each(&:lock) -      @hold_locks = true -    end +    return unless (@@locked ||= []).empty? +    formula.recursive_dependencies.each do |dep| +      @@locked << dep.to_formula +    end unless ignore_deps? +    @@locked.unshift(formula) +    @@locked.uniq! +    @@locked.each(&:lock) +    @hold_locks = true    end    def unlock -    if hold_locks? -      @@locked.each(&:unlock) -      @@locked.clear -      @hold_locks = false -    end +    return unless hold_locks? +    @@locked.each(&:unlock) +    @@locked.clear +    @hold_locks = false    end  end diff --git a/Library/Homebrew/formula_lock.rb b/Library/Homebrew/formula_lock.rb index 8743eaef8..4bd12df18 100644 --- a/Library/Homebrew/formula_lock.rb +++ b/Library/Homebrew/formula_lock.rb @@ -10,16 +10,14 @@ class FormulaLock    def lock      HOMEBREW_LOCK_DIR.mkpath      @lockfile = get_or_create_lockfile -    unless @lockfile.flock(File::LOCK_EX | File::LOCK_NB) -      raise OperationInProgressError, @name -    end +    return if @lockfile.flock(File::LOCK_EX | File::LOCK_NB) +    raise OperationInProgressError, @name    end    def unlock -    unless @lockfile.nil? || @lockfile.closed? -      @lockfile.flock(File::LOCK_UN) -      @lockfile.close -    end +    return if @lockfile.nil? || @lockfile.closed? +    @lockfile.flock(File::LOCK_UN) +    @lockfile.close    end    def with_lock diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index a6ec45d3c..e3c893fd6 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -314,7 +314,9 @@ class Formulary      possible_tap_formulae = tap_paths(ref)      if possible_tap_formulae.size > 1        raise TapFormulaAmbiguityError.new(ref, possible_tap_formulae) -    elsif possible_tap_formulae.size == 1 +    end + +    if possible_tap_formulae.size == 1        path = possible_tap_formulae.first.resolved_path        name = path.basename(".rb").to_s        return FormulaLoader.new(name, path) @@ -336,7 +338,9 @@ class Formulary      if possible_tap_newname_formulae.size > 1        raise TapFormulaWithOldnameAmbiguityError.new(ref, possible_tap_newname_formulae) -    elsif !possible_tap_newname_formulae.empty? +    end + +    unless possible_tap_newname_formulae.empty?        return TapLoader.new(possible_tap_newname_formulae.first)      end @@ -368,7 +372,9 @@ class Formulary      possible_pinned_tap_formulae = tap_paths(ref, Dir["#{HOMEBREW_LIBRARY}/PinnedTaps/*/*/"]).map(&:realpath)      if possible_pinned_tap_formulae.size > 1        raise TapFormulaAmbiguityError.new(ref, possible_pinned_tap_formulae) -    elsif possible_pinned_tap_formulae.size == 1 +    end + +    if possible_pinned_tap_formulae.size == 1        selected_formula = factory(possible_pinned_tap_formulae.first, spec)        if core_path(ref).file?          opoo <<-EOS.undent diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index ac31343d0..d2c9e12e8 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -394,10 +394,9 @@ class Keg      opt_record.delete if opt_record.symlink? || opt_record.exist?      make_relative_symlink(opt_record, path, mode) -    if oldname_opt_record -      oldname_opt_record.delete -      make_relative_symlink(oldname_opt_record, path, mode) -    end +    return unless oldname_opt_record +    oldname_opt_record.delete +    make_relative_symlink(oldname_opt_record, path, mode)    end    def delete_pyc_files! @@ -423,18 +422,19 @@ class Keg        return      end -    if stat.directory? -      begin -        keg = Keg.for(src) -      rescue NotAKegError -        puts "Won't resolve conflicts for symlink #{dst} as it doesn't resolve into the Cellar" if ARGV.verbose? -        return +    return unless stat.directory? +    begin +      keg = Keg.for(src) +    rescue NotAKegError +      if ARGV.verbose? +        puts "Won't resolve conflicts for symlink #{dst} as it doesn't resolve into the Cellar"        end - -      dst.unlink unless mode.dry_run -      keg.link_dir(src, mode) { :mkpath } -      return true +      return      end + +    dst.unlink unless mode.dry_run +    keg.link_dir(src, mode) { :mkpath } +    true    end    def make_relative_symlink(dst, src, mode) @@ -462,9 +462,8 @@ class Keg      dst.delete if mode.overwrite && (dst.exist? || dst.symlink?)      dst.make_relative_symlink(src)    rescue Errno::EEXIST => e -    if dst.exist? -      raise ConflictError.new(self, src.relative_path_from(path), dst, e) -    elsif dst.symlink? +    raise ConflictError.new(self, src.relative_path_from(path), dst, e) if dst.exist? +    if dst.symlink?        dst.unlink        retry      end diff --git a/Library/Homebrew/migrator.rb b/Library/Homebrew/migrator.rb index d8c06de1a..addd97c8a 100644 --- a/Library/Homebrew/migrator.rb +++ b/Library/Homebrew/migrator.rb @@ -182,22 +182,21 @@ class Migrator    end    def repin -    if pinned? -      # old_pin_record is a relative symlink and when we try to to read it -      # from <dir> we actually try to find file -      # <dir>/../<...>/../Cellar/name/version. -      # To repin formula we need to update the link thus that it points to -      # the right directory. -      # NOTE: old_pin_record.realpath.sub(oldname, newname) is unacceptable -      # here, because it resolves every symlink for old_pin_record and then -      # substitutes oldname with newname. It breaks things like -      # Pathname#make_relative_symlink, where Pathname#relative_path_from -      # is used to find relative path from source to destination parent and -      # it assumes no symlinks. -      src_oldname = old_pin_record.dirname.join(old_pin_link_record).expand_path -      new_pin_record.make_relative_symlink(src_oldname.sub(oldname, newname)) -      old_pin_record.delete -    end +    return unless pinned? +    # old_pin_record is a relative symlink and when we try to to read it +    # from <dir> we actually try to find file +    # <dir>/../<...>/../Cellar/name/version. +    # To repin formula we need to update the link thus that it points to +    # the right directory. +    # NOTE: old_pin_record.realpath.sub(oldname, newname) is unacceptable +    # here, because it resolves every symlink for old_pin_record and then +    # substitutes oldname with newname. It breaks things like +    # Pathname#make_relative_symlink, where Pathname#relative_path_from +    # is used to find relative path from source to destination parent and +    # it assumes no symlinks. +    src_oldname = old_pin_record.dirname.join(old_pin_link_record).expand_path +    new_pin_record.make_relative_symlink(src_oldname.sub(oldname, newname)) +    old_pin_record.delete    end    def unlink_oldname @@ -254,10 +253,9 @@ class Migrator    # Link keg to opt if it was linked before migrating.    def link_oldname_opt -    if old_opt_record -      old_opt_record.delete if old_opt_record.symlink? -      old_opt_record.make_relative_symlink(new_linked_keg_record) -    end +    return unless old_opt_record +    old_opt_record.delete if old_opt_record.symlink? +    old_opt_record.make_relative_symlink(new_linked_keg_record)    end    # After migtaion every INSTALL_RECEIPT.json has wrong path to the formula @@ -316,23 +314,22 @@ class Migrator        end      end -    unless old_linked_keg.nil? -      # The keg used to be linked and when we backup everything we restore -      # Cellar/oldname, the target also gets restored, so we are able to -      # create a keg using its old path -      if old_linked_keg_record -        begin -          old_linked_keg.link -        rescue Keg::LinkError -          old_linked_keg.unlink -          raise -        rescue Keg::AlreadyLinkedError -          old_linked_keg.unlink -          retry -        end -      else -        old_linked_keg.optlink +    return if old_linked_keg.nil? +    # The keg used to be linked and when we backup everything we restore +    # Cellar/oldname, the target also gets restored, so we are able to +    # create a keg using its old path +    if old_linked_keg_record +      begin +        old_linked_keg.link +      rescue Keg::LinkError +        old_linked_keg.unlink +        raise +      rescue Keg::AlreadyLinkedError +        old_linked_keg.unlink +        retry        end +    else +      old_linked_keg.optlink      end    end diff --git a/Library/Homebrew/os/mac/xcode.rb b/Library/Homebrew/os/mac/xcode.rb index dac8b8f1e..0f78e4412 100644 --- a/Library/Homebrew/os/mac/xcode.rb +++ b/Library/Homebrew/os/mac/xcode.rb @@ -18,12 +18,10 @@ module OS          when "10.11" then "8.0"          when "10.12" then "8.0"          else +          raise "macOS '#{MacOS.version}' is invalid" unless OS::Mac.prerelease? +            # Default to newest known version of Xcode for unreleased macOS versions. -          if OS::Mac.prerelease? -            "8.0" -          else -            raise "macOS '#{MacOS.version}' is invalid" -          end +          "8.0"          end        end diff --git a/Library/Homebrew/patch.rb b/Library/Homebrew/patch.rb index 74e58e526..1b7751ba3 100644 --- a/Library/Homebrew/patch.rb +++ b/Library/Homebrew/patch.rb @@ -130,14 +130,13 @@ class ExternalPatch        patch_dir = Pathname.pwd        if patch_files.empty?          children = patch_dir.children -        if children.length == 1 && children.first.file? -          patch_files << children.first.basename -        else +        if children.length != 1 || !children.first.file?            raise MissingApplyError, <<-EOS.undent              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          end +        patch_files << children.first.basename        end        dir.cd do          patch_files.each do |patch_file| diff --git a/Library/Homebrew/requirement.rb b/Library/Homebrew/requirement.rb index 2931b1466..89487fec3 100644 --- a/Library/Homebrew/requirement.rb +++ b/Library/Homebrew/requirement.rb @@ -83,12 +83,11 @@ class Requirement      # PATH.      # This is undocumented magic and it should be removed, but we need to add      # a way to declare path-based requirements that work with superenv first. -    if @satisfied_result.is_a?(Pathname) -      parent = @satisfied_result.parent -      unless ENV["PATH"].split(File::PATH_SEPARATOR).include?(parent.to_s) -        ENV.append_path("PATH", parent) -      end -    end +    return unless @satisfied_result.is_a?(Pathname) +    parent = @satisfied_result.parent + +    return if ENV["PATH"].split(File::PATH_SEPARATOR).include?(parent.to_s) +    ENV.append_path("PATH", parent)    end    def env @@ -199,11 +198,8 @@ class Requirement        formulae.each do |f|          f.requirements.each do |req| -          if prune?(f, req, &block) -            next -          else -            reqs << req -          end +          next if prune?(f, req, &block) +          reqs << req          end        end diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index ecf81ca37..c73e3f7a7 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -130,9 +130,8 @@ class Tap    # The issues URL of this {Tap}.    # e.g. `https://github.com/user/homebrew-repo/issues`    def issues_url -    if official? || !custom_remote? -      "https://github.com/#{user}/homebrew-#{repo}/issues" -    end +    return unless official? || !custom_remote? +    "https://github.com/#{user}/homebrew-#{repo}/issues"    end    def to_s @@ -236,15 +235,16 @@ class Tap      puts "Tapped #{formula_count} formula#{plural(formula_count, "e")} (#{path.abv})" unless quiet      Descriptions.cache_formulae(formula_names) -    if !options[:clone_target] && private? && !quiet -      puts <<-EOS.undent -        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: -          cd #{path} -          git remote set-url origin git@github.com:#{user}/homebrew-#{repo}.git -      EOS -    end +    return if options[:clone_target] +    return unless private? +    return if quiet +    puts <<-EOS.undent +      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: +        cd #{path} +        git remote set-url origin git@github.com:#{user}/homebrew-#{repo}.git +    EOS    end    def link_manpages diff --git a/Library/Homebrew/test/test_cmd_testbot.rb b/Library/Homebrew/test/test_cmd_testbot.rb index d762448d1..239fa7a37 100644 --- a/Library/Homebrew/test/test_cmd_testbot.rb +++ b/Library/Homebrew/test/test_cmd_testbot.rb @@ -45,9 +45,8 @@ class TestbotStepTests < Homebrew::TestCase    end    def teardown -    unless passed? -      raise "INFO: Previous test failed with ENV['TRAVIS'] = #{ENV["TRAVIS"].inspect}" -    end +    return if passed? +    raise "INFO: Previous test failed with ENV['TRAVIS'] = #{ENV["TRAVIS"].inspect}"    end    def stub_test_instance diff --git a/Library/Homebrew/test/test_integration_cmds.rb b/Library/Homebrew/test/test_integration_cmds.rb index 11eb6c69d..379e8d90d 100644 --- a/Library/Homebrew/test/test_integration_cmds.rb +++ b/Library/Homebrew/test/test_integration_cmds.rb @@ -39,9 +39,8 @@ class IntegrationCommandTests < Homebrew::TestCase    end    def needs_test_cmd_taps -    unless ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"] -      skip "HOMEBREW_TEST_OFFICIAL_CMD_TAPS is not set" -    end +    return if ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"] +    skip "HOMEBREW_TEST_OFFICIAL_CMD_TAPS is not set"    end    def needs_macos diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb index 2b4f9422b..02264aa39 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -57,9 +57,8 @@ module Homebrew        super        files_after_test = []        Find.find(TEST_TMPDIR) { |f| files_after_test << f.sub(TEST_TMPDIR, "") } -      if @__files_before_test != files_after_test -        @@log.puts location, diff(@__files_before_test, files_after_test) -      end +      return if @__files_before_test == files_after_test +      @@log.puts location, diff(@__files_before_test, files_after_test)      end    end diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index be629f1df..58083fe1b 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -218,13 +218,9 @@ def interactive_shell(f = nil)    Process.wait fork { exec ENV["SHELL"] } -  if $?.success? -    return -  elsif $?.exited? -    raise "Aborted due to non-zero exit status (#{$?.exitstatus})" -  else -    raise $?.inspect -  end +  return if $?.success? +  raise "Aborted due to non-zero exit status (#{$?.exitstatus})" if $?.exited? +  raise $?.inspect  end  module Homebrew @@ -325,13 +321,12 @@ module Homebrew        end      end -    if $times.nil? -      $times = {} -      at_exit do -        col_width = [$times.keys.map(&:size).max + 2, 15].max -        $times.sort_by { |_k, v| v }.each do |method, time| -          puts format("%-*s %0.4f sec", col_width, "#{method}:", time) -        end +    return unless $times.nil? +    $times = {} +    at_exit do +      col_width = [$times.keys.map(&:size).max + 2, 15].max +      $times.sort_by { |_k, v| v }.each do |method, time| +        puts format("%-*s %0.4f sec", col_width, "#{method}:", time)        end      end    end @@ -608,14 +603,14 @@ def link_src_dst_dirs(src_dir, dst_dir, command, link_dir: false)      dst_dir.parent.mkpath      dst.make_relative_symlink(src)    end -  unless conflicts.empty? -    onoe <<-EOS.undent -      Could not link: -      #{conflicts.join("\n")} -      Please delete these paths and run `#{command}`. -    EOS -  end +  return if conflicts.empty? +  onoe <<-EOS.undent +    Could not link: +    #{conflicts.join("\n")} + +    Please delete these paths and run `#{command}`. +  EOS  end  def link_path_manpages(path, command) diff --git a/Library/Homebrew/utils/popen.rb b/Library/Homebrew/utils/popen.rb index 76e67b3a9..350d9a09f 100644 --- a/Library/Homebrew/utils/popen.rb +++ b/Library/Homebrew/utils/popen.rb @@ -14,11 +14,8 @@ module Utils    def self.popen(args, mode)      IO.popen("-", mode) do |pipe|        if pipe -        if block_given? -          yield pipe -        else -          return pipe.read -        end +        return pipe.read unless block_given? +        yield pipe        else          $stderr.reopen("/dev/null", "w")          exec(*args) diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index e2085a8a6..00fe2f490 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -192,11 +192,10 @@ class Version    end    def initialize(val) -    if val.respond_to?(:to_str) -      @version = val.to_str -    else +    unless val.respond_to?(:to_str)        raise TypeError, "Version value must be a string; got a #{val.class} (#{val})"      end +    @version = val.to_str    end    def detected_from_url?  | 
