Merge pull request #2522 from MikeMcQuaid/more-deprecations
More deprecations.
This commit is contained in:
commit
a937ed0a20
@ -47,7 +47,6 @@ class BuildOptions
|
|||||||
def bottle?
|
def bottle?
|
||||||
include? "build-bottle"
|
include? "build-bottle"
|
||||||
end
|
end
|
||||||
alias build_bottle? bottle?
|
|
||||||
|
|
||||||
# True if a {Formula} is being built with {Formula.head} instead of {Formula.stable}.
|
# True if a {Formula} is being built with {Formula.head} instead of {Formula.stable}.
|
||||||
# <pre>args << "--some-new-stuff" if build.head?</pre>
|
# <pre>args << "--some-new-stuff" if build.head?</pre>
|
||||||
|
@ -49,10 +49,10 @@ class Caveats
|
|||||||
if f.bin.directory? || f.sbin.directory?
|
if f.bin.directory? || f.sbin.directory?
|
||||||
s << "\nIf you need to have this software first in your PATH run:\n"
|
s << "\nIf you need to have this software first in your PATH run:\n"
|
||||||
if f.bin.directory?
|
if f.bin.directory?
|
||||||
s << " #{Utils::Shell.prepend_path_in_shell_profile(f.opt_bin.to_s)}\n"
|
s << " #{Utils::Shell.prepend_path_in_profile(f.opt_bin.to_s)}\n"
|
||||||
end
|
end
|
||||||
if f.sbin.directory?
|
if f.sbin.directory?
|
||||||
s << " #{Utils::Shell.prepend_path_in_shell_profile(f.opt_sbin.to_s)}\n"
|
s << " #{Utils::Shell.prepend_path_in_profile(f.opt_sbin.to_s)}\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,9 +22,9 @@ module Homebrew
|
|||||||
# legacy behavior
|
# legacy behavior
|
||||||
shell = :bash unless $stdout.tty?
|
shell = :bash unless $stdout.tty?
|
||||||
elsif shell_value == "auto"
|
elsif shell_value == "auto"
|
||||||
shell = Utils::Shell.parent_shell || Utils::Shell.preferred_shell
|
shell = Utils::Shell.parent || Utils::Shell.preferred
|
||||||
elsif shell_value
|
elsif shell_value
|
||||||
shell = Utils::Shell.path_to_shell(shell_value)
|
shell = Utils::Shell.from_path(shell_value)
|
||||||
end
|
end
|
||||||
|
|
||||||
env_keys = build_env_keys(ENV)
|
env_keys = build_env_keys(ENV)
|
||||||
|
@ -86,8 +86,8 @@ module Homebrew
|
|||||||
|
|
||||||
opt = HOMEBREW_PREFIX/"opt/#{keg.name}"
|
opt = HOMEBREW_PREFIX/"opt/#{keg.name}"
|
||||||
puts "\nIf you need to have this software first in your PATH instead consider running:"
|
puts "\nIf you need to have this software first in your PATH instead consider running:"
|
||||||
puts " #{Utils::Shell.prepend_path_in_shell_profile(opt/"bin")}" if bin.directory?
|
puts " #{Utils::Shell.prepend_path_in_profile(opt/"bin")}" if bin.directory?
|
||||||
puts " #{Utils::Shell.prepend_path_in_shell_profile(opt/"sbin")}" if sbin.directory?
|
puts " #{Utils::Shell.prepend_path_in_profile(opt/"sbin")}" if sbin.directory?
|
||||||
end
|
end
|
||||||
|
|
||||||
def keg_only?(rack)
|
def keg_only?(rack)
|
||||||
|
@ -63,17 +63,4 @@ module Homebrew
|
|||||||
def full_clone?
|
def full_clone?
|
||||||
ARGV.include?("--full") || ARGV.homebrew_developer?
|
ARGV.include?("--full") || ARGV.homebrew_developer?
|
||||||
end
|
end
|
||||||
|
|
||||||
# @deprecated this method will be removed in the future, if no external commands use it.
|
|
||||||
def install_tap(user, repo, clone_target = nil)
|
|
||||||
opoo "Homebrew.install_tap is deprecated, use Tap#install."
|
|
||||||
tap = Tap.fetch(user, repo)
|
|
||||||
begin
|
|
||||||
tap.install(clone_target: clone_target, full_clone: full_clone?)
|
|
||||||
rescue TapAlreadyTappedError
|
|
||||||
false
|
|
||||||
else
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
@ -25,3 +25,4 @@ require "compat/tab"
|
|||||||
require "compat/ENV/shared"
|
require "compat/ENV/shared"
|
||||||
require "compat/ENV/std"
|
require "compat/ENV/std"
|
||||||
require "compat/ENV/super"
|
require "compat/ENV/super"
|
||||||
|
require "compat/utils/shell"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
module HomebrewArgvExtension
|
module HomebrewArgvExtension
|
||||||
def build_32_bit?
|
def build_32_bit?
|
||||||
# odeprecated "ARGV.build_32_bit?"
|
odeprecated "ARGV.build_32_bit?"
|
||||||
include? "--32-bit"
|
include? "--32-bit"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
class BuildOptions
|
class BuildOptions
|
||||||
def build_32_bit?
|
def build_32_bit?
|
||||||
# odeprecated "build.build_32_bit?"
|
odeprecated "build.build_32_bit?"
|
||||||
include?("32-bit") && option_defined?("32-bit")
|
include?("32-bit") && option_defined?("32-bit")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def build_bottle?
|
||||||
|
odeprecated "build.build_bottle?", "build.bottle?"
|
||||||
|
bottle?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -14,7 +14,6 @@ class DependencyCollector
|
|||||||
output_deprecation(spec, tags)
|
output_deprecation(spec, tags)
|
||||||
Dependency.new(spec.to_s, tags)
|
Dependency.new(spec.to_s, tags)
|
||||||
when :apr
|
when :apr
|
||||||
# TODO: reenable in future when we've fixed a few of the audits.
|
|
||||||
# output_deprecation(spec, tags, "apr-util")
|
# output_deprecation(spec, tags, "apr-util")
|
||||||
Dependency.new("apr-util", tags)
|
Dependency.new("apr-util", tags)
|
||||||
when :libltdl
|
when :libltdl
|
||||||
|
@ -3,7 +3,7 @@ module Homebrew
|
|||||||
|
|
||||||
def method_missing(method, *args, &block)
|
def method_missing(method, *args, &block)
|
||||||
if instance_methods.include?(method)
|
if instance_methods.include?(method)
|
||||||
# odeprecated "#{self}##{method}", "'module_function' or 'def self.#{method}' to convert it to a class method"
|
odeprecated "#{self}##{method}", "'module_function' or 'def self.#{method}' to convert it to a class method"
|
||||||
return instance_method(method).bind(self).call(*args, &block)
|
return instance_method(method).bind(self).call(*args, &block)
|
||||||
end
|
end
|
||||||
super
|
super
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
class BottleSpecification
|
class BottleSpecification
|
||||||
def revision(*args)
|
def revision(*args)
|
||||||
# Don't announce deprecation yet as this is quite a big change
|
|
||||||
# to a public interface.
|
|
||||||
# odeprecated "BottleSpecification.revision", "BottleSpecification.rebuild"
|
# odeprecated "BottleSpecification.revision", "BottleSpecification.rebuild"
|
||||||
rebuild(*args)
|
rebuild(*args)
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
class Tab < OpenStruct
|
class Tab < OpenStruct
|
||||||
def build_32_bit?
|
def build_32_bit?
|
||||||
# odeprecated "Tab.build_32_bit?"
|
odeprecated "Tab.build_32_bit?"
|
||||||
include?("32-bit")
|
include?("32-bit")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,5 +6,3 @@ class Tap
|
|||||||
core_tap?
|
core_tap?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
CoreFormulaRepository = CoreTap
|
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
# return the shell profile file based on users' preference shell
|
|
||||||
def shell_profile
|
def shell_profile
|
||||||
opoo "shell_profile has been deprecated in favor of Utils::Shell.profile"
|
# odeprecated "shell_profile", "Utils::Shell.profile"
|
||||||
case ENV["SHELL"]
|
Utils::Shell.profile
|
||||||
when %r{/(ba)?sh} then "~/.bash_profile"
|
|
||||||
when %r{/zsh} then "~/.zshrc"
|
|
||||||
when %r{/ksh} then "~/.kshrc"
|
|
||||||
else "~/.bash_profile"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module Tty
|
module Tty
|
||||||
module_function
|
module_function
|
||||||
|
|
||||||
def white
|
def white
|
||||||
|
odeprecated "Tty.white", "Tty.reset.bold"
|
||||||
reset.bold
|
reset.bold
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
8
Library/Homebrew/compat/utils/shell.rb
Normal file
8
Library/Homebrew/compat/utils/shell.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module Utils
|
||||||
|
module Shell
|
||||||
|
def self.shell_profile
|
||||||
|
odeprecated "Utils::Shell.shell_profile", "Utils::Shell.profile"
|
||||||
|
Utils::Shell.profile
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -29,15 +29,6 @@ module Homebrew
|
|||||||
|
|
||||||
# Create a formula from a tarball URL
|
# Create a formula from a tarball URL
|
||||||
def create
|
def create
|
||||||
# Allow searching MacPorts or Fink.
|
|
||||||
if ARGV.include? "--macports"
|
|
||||||
opoo "`brew create --macports` is deprecated; use `brew search --macports` instead"
|
|
||||||
exec_browser "https://www.macports.org/ports.php?by=name&substr=#{ARGV.next}"
|
|
||||||
elsif ARGV.include? "--fink"
|
|
||||||
opoo "`brew create --fink` is deprecated; use `brew search --fink` instead"
|
|
||||||
exec_browser "http://pdb.finkproject.org/pdb/browse.php?summary=#{ARGV.next}"
|
|
||||||
end
|
|
||||||
|
|
||||||
raise UsageError if ARGV.named.empty?
|
raise UsageError if ARGV.named.empty?
|
||||||
|
|
||||||
# Ensure that the cache exists so we can fetch the tarball
|
# Ensure that the cache exists so we can fetch the tarball
|
||||||
|
@ -460,7 +460,7 @@ module Homebrew
|
|||||||
|
|
||||||
Consider setting your PATH so that #{HOMEBREW_PREFIX}/bin
|
Consider setting your PATH so that #{HOMEBREW_PREFIX}/bin
|
||||||
occurs before /usr/bin. Here is a one-liner:
|
occurs before /usr/bin. Here is a one-liner:
|
||||||
#{Utils::Shell.prepend_path_in_shell_profile("#{HOMEBREW_PREFIX}/bin")}
|
#{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/bin")}
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -480,7 +480,7 @@ module Homebrew
|
|||||||
<<-EOS.undent
|
<<-EOS.undent
|
||||||
Homebrew's bin was not found in your PATH.
|
Homebrew's bin was not found in your PATH.
|
||||||
Consider setting the PATH for example like so
|
Consider setting the PATH for example like so
|
||||||
#{Utils::Shell.prepend_path_in_shell_profile("#{HOMEBREW_PREFIX}/bin")}
|
#{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/bin")}
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -495,7 +495,7 @@ module Homebrew
|
|||||||
Homebrew's sbin was not found in your PATH but you have installed
|
Homebrew's sbin was not found in your PATH but you have installed
|
||||||
formulae that put executables in #{HOMEBREW_PREFIX}/sbin.
|
formulae that put executables in #{HOMEBREW_PREFIX}/sbin.
|
||||||
Consider setting the PATH for example like so
|
Consider setting the PATH for example like so
|
||||||
#{Utils::Shell.prepend_path_in_shell_profile("#{HOMEBREW_PREFIX}/sbin")}
|
#{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/sbin")}
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -325,11 +325,6 @@ module Superenv
|
|||||||
|
|
||||||
def set_x11_env_if_installed
|
def set_x11_env_if_installed
|
||||||
end
|
end
|
||||||
|
|
||||||
# This method does nothing in superenv since there's no custom CFLAGS API
|
|
||||||
# @private
|
|
||||||
def set_cpu_flags(*_args)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Array
|
class Array
|
||||||
|
@ -263,7 +263,7 @@ module Homebrew
|
|||||||
SSL_CERT_DIR support was removed from Apple's curl.
|
SSL_CERT_DIR support was removed from Apple's curl.
|
||||||
If fetching formulae fails you should:
|
If fetching formulae fails you should:
|
||||||
unset SSL_CERT_DIR
|
unset SSL_CERT_DIR
|
||||||
and remove it from #{Utils::Shell.shell_profile} if present.
|
and remove it from #{Utils::Shell.profile} if present.
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -365,9 +365,8 @@ class Pathname
|
|||||||
|
|
||||||
unless method_defined?(:/)
|
unless method_defined?(:/)
|
||||||
def /(other)
|
def /(other)
|
||||||
unless other.respond_to?(:to_str) || other.respond_to?(:to_path)
|
if !other.respond_to?(:to_str) && !other.respond_to?(:to_path)
|
||||||
opoo "Pathname#/ called on #{inspect} with #{other.inspect} as an argument"
|
odeprecated "Pathname#/ with #{other.class}", "a String or a Pathname"
|
||||||
puts "This behavior is deprecated, please pass either a String or a Pathname"
|
|
||||||
end
|
end
|
||||||
self + other.to_s
|
self + other.to_s
|
||||||
end
|
end
|
||||||
|
@ -2396,7 +2396,6 @@ class Formula
|
|||||||
# version '4.8.1'
|
# version '4.8.1'
|
||||||
# end</pre>
|
# end</pre>
|
||||||
def fails_with(compiler, &block)
|
def fails_with(compiler, &block)
|
||||||
# TODO: deprecate this in future.
|
|
||||||
# odeprecated "fails_with :llvm" if compiler == :llvm
|
# odeprecated "fails_with :llvm" if compiler == :llvm
|
||||||
specs.each { |spec| spec.fails_with(compiler, &block) }
|
specs.each { |spec| spec.fails_with(compiler, &block) }
|
||||||
end
|
end
|
||||||
|
@ -14,7 +14,7 @@ module FormulaCellarChecks
|
|||||||
|
|
||||||
<<-EOS.undent
|
<<-EOS.undent
|
||||||
#{prefix_bin} is not in your PATH
|
#{prefix_bin} is not in your PATH
|
||||||
You can amend this by altering your #{Utils::Shell.shell_profile} file
|
You can amend this by altering your #{Utils::Shell.profile} file
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -53,29 +53,6 @@ module Language
|
|||||||
quiet_system python, "-c", script
|
quiet_system python, "-c", script
|
||||||
end
|
end
|
||||||
|
|
||||||
# deprecated; use system "python", *setup_install_args(prefix) instead
|
|
||||||
def self.setup_install(python, prefix, *args)
|
|
||||||
opoo <<-EOS.undent
|
|
||||||
Language::Python.setup_install is deprecated.
|
|
||||||
If you are a formula author, please use
|
|
||||||
system "python", *Language::Python.setup_install_args(prefix)
|
|
||||||
instead.
|
|
||||||
EOS
|
|
||||||
|
|
||||||
# force-import setuptools, which monkey-patches distutils, to make
|
|
||||||
# sure that we always call a setuptools setup.py. trick borrowed from pip:
|
|
||||||
# https://github.com/pypa/pip/blob/043af83/pip/req/req_install.py#L743-L780
|
|
||||||
shim = <<-EOS.undent
|
|
||||||
import setuptools, tokenize
|
|
||||||
__file__ = 'setup.py'
|
|
||||||
exec(compile(getattr(tokenize, 'open', open)(__file__).read()
|
|
||||||
.replace('\\r\\n', '\\n'), __file__, 'exec'))
|
|
||||||
EOS
|
|
||||||
args += %w[--single-version-externally-managed --record=installed.txt]
|
|
||||||
args << "--prefix=#{prefix}"
|
|
||||||
system python, "-c", shim, "install", *args
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.setup_install_args(prefix)
|
def self.setup_install_args(prefix)
|
||||||
shim = <<-EOS.undent
|
shim = <<-EOS.undent
|
||||||
import setuptools, tokenize
|
import setuptools, tokenize
|
||||||
|
@ -128,11 +128,10 @@ module OS
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# The remaining logic provides a fake Xcode version for CLT-only
|
# The remaining logic provides a fake Xcode version based on the
|
||||||
# systems. This behavior only exists because Homebrew used to assume
|
# installed CLT version. This is useful as they are packaged
|
||||||
# Xcode.version would always be non-nil. This is deprecated, and will
|
# simultaneously so workarounds need to apply to both based on their
|
||||||
# be removed in a future version. To remain compatible, guard usage of
|
# comparable version.
|
||||||
# Xcode.version with an Xcode.installed? check.
|
|
||||||
case (DevelopmentTools.clang_version.to_f * 10).to_i
|
case (DevelopmentTools.clang_version.to_f * 10).to_i
|
||||||
when 0 then "dunno"
|
when 0 then "dunno"
|
||||||
when 1..14 then "3.2.2"
|
when 1..14 then "3.2.2"
|
||||||
|
@ -161,11 +161,9 @@ class Requirement
|
|||||||
class << self
|
class << self
|
||||||
include BuildEnvironmentDSL
|
include BuildEnvironmentDSL
|
||||||
|
|
||||||
attr_reader :env_proc
|
attr_reader :env_proc, :build
|
||||||
attr_rw :fatal, :default_formula
|
attr_rw :fatal, :default_formula
|
||||||
attr_rw :cask, :download
|
attr_rw :cask, :download
|
||||||
# build is deprecated, use `depends_on <requirement> => :build` instead
|
|
||||||
attr_rw :build
|
|
||||||
|
|
||||||
def satisfy(options = {}, &block)
|
def satisfy(options = {}, &block)
|
||||||
@satisfied ||= Requirement::Satisfier.new(options, &block)
|
@satisfied ||= Requirement::Satisfier.new(options, &block)
|
||||||
|
@ -117,8 +117,7 @@ class SoftwareSpec
|
|||||||
def option(name, description = "")
|
def option(name, description = "")
|
||||||
opt = PREDEFINED_OPTIONS.fetch(name) do
|
opt = PREDEFINED_OPTIONS.fetch(name) do
|
||||||
if name.is_a?(Symbol)
|
if name.is_a?(Symbol)
|
||||||
opoo "Passing arbitrary symbols to `option` is deprecated: #{name.inspect}"
|
odeprecated "passing arbitrary symbols (i.e. #{name.inspect}) to `option`"
|
||||||
puts "Symbols are reserved for future use, please pass a string instead"
|
|
||||||
name = name.to_s
|
name = name.to_s
|
||||||
end
|
end
|
||||||
unless name.is_a?(String)
|
unless name.is_a?(String)
|
||||||
@ -172,7 +171,6 @@ class SoftwareSpec
|
|||||||
end
|
end
|
||||||
|
|
||||||
def fails_with(compiler, &block)
|
def fails_with(compiler, &block)
|
||||||
# TODO: deprecate this in future.
|
|
||||||
# odeprecated "fails_with :llvm" if compiler == :llvm
|
# odeprecated "fails_with :llvm" if compiler == :llvm
|
||||||
compiler_failures << CompilerFailure.create(compiler, &block)
|
compiler_failures << CompilerFailure.create(compiler, &block)
|
||||||
end
|
end
|
||||||
|
@ -3,7 +3,7 @@ require "software_spec"
|
|||||||
|
|
||||||
describe CompilerSelector do
|
describe CompilerSelector do
|
||||||
subject { described_class.new(software_spec, versions, compilers) }
|
subject { described_class.new(software_spec, versions, compilers) }
|
||||||
let(:compilers) { [:clang, :gcc, :llvm, :gnu] }
|
let(:compilers) { [:clang, :gcc, :gnu] }
|
||||||
let(:software_spec) { SoftwareSpec.new }
|
let(:software_spec) { SoftwareSpec.new }
|
||||||
let(:cc) { :clang }
|
let(:cc) { :clang }
|
||||||
let(:versions) do
|
let(:versions) do
|
||||||
@ -28,7 +28,6 @@ describe CompilerSelector do
|
|||||||
describe "#compiler" do
|
describe "#compiler" do
|
||||||
it "raises an error if no matching compiler can be found" do
|
it "raises an error if no matching compiler can be found" do
|
||||||
software_spec.fails_with(:clang)
|
software_spec.fails_with(:clang)
|
||||||
software_spec.fails_with(:llvm)
|
|
||||||
software_spec.fails_with(:gcc)
|
software_spec.fails_with(:gcc)
|
||||||
software_spec.fails_with(gcc: "4.8")
|
software_spec.fails_with(gcc: "4.8")
|
||||||
software_spec.fails_with(gcc: "4.7")
|
software_spec.fails_with(gcc: "4.7")
|
||||||
@ -45,11 +44,6 @@ describe CompilerSelector do
|
|||||||
expect(subject.compiler).to eq(:gcc)
|
expect(subject.compiler).to eq(:gcc)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns clang if it fails with llvm" do
|
|
||||||
software_spec.fails_with(:llvm)
|
|
||||||
expect(subject.compiler).to eq(:clang)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns clang if it fails with gcc" do
|
it "returns clang if it fails with gcc" do
|
||||||
software_spec.fails_with(:gcc)
|
software_spec.fails_with(:gcc)
|
||||||
expect(subject.compiler).to eq(:clang)
|
expect(subject.compiler).to eq(:clang)
|
||||||
@ -68,13 +62,11 @@ describe CompilerSelector do
|
|||||||
|
|
||||||
it "returns gcc if it fails with clang and llvm" do
|
it "returns gcc if it fails with clang and llvm" do
|
||||||
software_spec.fails_with(:clang)
|
software_spec.fails_with(:clang)
|
||||||
software_spec.fails_with(:llvm)
|
|
||||||
expect(subject.compiler).to eq(:gcc)
|
expect(subject.compiler).to eq(:gcc)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns clang if it fails with gcc and llvm" do
|
it "returns clang if it fails with gcc and llvm" do
|
||||||
software_spec.fails_with(:gcc)
|
software_spec.fails_with(:gcc)
|
||||||
software_spec.fails_with(:llvm)
|
|
||||||
expect(subject.compiler).to eq(:clang)
|
expect(subject.compiler).to eq(:clang)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -87,7 +79,6 @@ describe CompilerSelector do
|
|||||||
example "returns a lower version of gcc if it fails with the highest version" do
|
example "returns a lower version of gcc if it fails with the highest version" do
|
||||||
software_spec.fails_with(:clang)
|
software_spec.fails_with(:clang)
|
||||||
software_spec.fails_with(:gcc)
|
software_spec.fails_with(:gcc)
|
||||||
software_spec.fails_with(:llvm)
|
|
||||||
software_spec.fails_with(gcc: "4.8")
|
software_spec.fails_with(gcc: "4.8")
|
||||||
expect(subject.compiler).to eq("gcc-4.7")
|
expect(subject.compiler).to eq("gcc-4.7")
|
||||||
end
|
end
|
||||||
@ -102,7 +93,6 @@ describe CompilerSelector do
|
|||||||
allow(versions).to receive(:gcc_build_version).and_return(Version::NULL)
|
allow(versions).to receive(:gcc_build_version).and_return(Version::NULL)
|
||||||
|
|
||||||
software_spec.fails_with(:clang)
|
software_spec.fails_with(:clang)
|
||||||
software_spec.fails_with(:llvm)
|
|
||||||
software_spec.fails_with(gcc: "4.8")
|
software_spec.fails_with(gcc: "4.8")
|
||||||
software_spec.fails_with(gcc: "4.7")
|
software_spec.fails_with(gcc: "4.7")
|
||||||
|
|
||||||
|
@ -146,17 +146,13 @@ describe Requirement do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "#build?" do
|
describe "#build?" do
|
||||||
context "#build true is specified" do
|
context ":build tag is specified" do
|
||||||
let(:klass) do
|
subject { described_class.new([:build]) }
|
||||||
Class.new(described_class) do
|
|
||||||
build true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_a_build_requirement }
|
it { is_expected.to be_a_build_requirement }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "#build ommitted" do
|
context "#build omitted" do
|
||||||
it { is_expected.not_to be_a_build_requirement }
|
it { is_expected.not_to be_a_build_requirement }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,92 +1,92 @@
|
|||||||
require "utils/shell"
|
require "utils/shell"
|
||||||
|
|
||||||
describe Utils::Shell do
|
describe Utils::Shell do
|
||||||
describe "::shell_profile" do
|
describe "::profile" do
|
||||||
it "returns ~/.bash_profile by default" do
|
it "returns ~/.bash_profile by default" do
|
||||||
ENV["SHELL"] = "/bin/another_shell"
|
ENV["SHELL"] = "/bin/another_shell"
|
||||||
expect(subject.shell_profile).to eq("~/.bash_profile")
|
expect(subject.profile).to eq("~/.bash_profile")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns ~/.bash_profile for Sh" do
|
it "returns ~/.bash_profile for Sh" do
|
||||||
ENV["SHELL"] = "/bin/another_shell"
|
ENV["SHELL"] = "/bin/another_shell"
|
||||||
expect(subject.shell_profile).to eq("~/.bash_profile")
|
expect(subject.profile).to eq("~/.bash_profile")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns ~/.bash_profile for Bash" do
|
it "returns ~/.bash_profile for Bash" do
|
||||||
ENV["SHELL"] = "/bin/bash"
|
ENV["SHELL"] = "/bin/bash"
|
||||||
expect(subject.shell_profile).to eq("~/.bash_profile")
|
expect(subject.profile).to eq("~/.bash_profile")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns ~/.zshrc for Zsh" do
|
it "returns ~/.zshrc for Zsh" do
|
||||||
ENV["SHELL"] = "/bin/zsh"
|
ENV["SHELL"] = "/bin/zsh"
|
||||||
expect(subject.shell_profile).to eq("~/.zshrc")
|
expect(subject.profile).to eq("~/.zshrc")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns ~/.kshrc for Ksh" do
|
it "returns ~/.kshrc for Ksh" do
|
||||||
ENV["SHELL"] = "/bin/ksh"
|
ENV["SHELL"] = "/bin/ksh"
|
||||||
expect(subject.shell_profile).to eq("~/.kshrc")
|
expect(subject.profile).to eq("~/.kshrc")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "::path_to_shell" do
|
describe "::from_path" do
|
||||||
it "supports a raw command name" do
|
it "supports a raw command name" do
|
||||||
expect(subject.path_to_shell("bash")).to eq(:bash)
|
expect(subject.from_path("bash")).to eq(:bash)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "supports full paths" do
|
it "supports full paths" do
|
||||||
expect(subject.path_to_shell("/bin/bash")).to eq(:bash)
|
expect(subject.from_path("/bin/bash")).to eq(:bash)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "supports versions" do
|
it "supports versions" do
|
||||||
expect(subject.path_to_shell("zsh-5.2")).to eq(:zsh)
|
expect(subject.from_path("zsh-5.2")).to eq(:zsh)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "strips newlines" do
|
it "strips newlines" do
|
||||||
expect(subject.path_to_shell("zsh-5.2\n")).to eq(:zsh)
|
expect(subject.from_path("zsh-5.2\n")).to eq(:zsh)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns nil when input is invalid" do
|
it "returns nil when input is invalid" do
|
||||||
expect(subject.path_to_shell("")).to be nil
|
expect(subject.from_path("")).to be nil
|
||||||
expect(subject.path_to_shell("@@@@@@")).to be nil
|
expect(subject.from_path("@@@@@@")).to be nil
|
||||||
expect(subject.path_to_shell("invalid_shell-4.2")).to be nil
|
expect(subject.from_path("invalid_shell-4.2")).to be nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "::sh_quote" do
|
specify "::sh_quote" do
|
||||||
expect(subject.sh_quote("")).to eq("''")
|
expect(subject.send(:sh_quote, "")).to eq("''")
|
||||||
expect(subject.sh_quote("\\")).to eq("\\\\")
|
expect(subject.send(:sh_quote, "\\")).to eq("\\\\")
|
||||||
expect(subject.sh_quote("\n")).to eq("'\n'")
|
expect(subject.send(:sh_quote, "\n")).to eq("'\n'")
|
||||||
expect(subject.sh_quote("$")).to eq("\\$")
|
expect(subject.send(:sh_quote, "$")).to eq("\\$")
|
||||||
expect(subject.sh_quote("word")).to eq("word")
|
expect(subject.send(:sh_quote, "word")).to eq("word")
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "::csh_quote" do
|
specify "::csh_quote" do
|
||||||
expect(subject.csh_quote("")).to eq("''")
|
expect(subject.send(:csh_quote, "")).to eq("''")
|
||||||
expect(subject.csh_quote("\\")).to eq("\\\\")
|
expect(subject.send(:csh_quote, "\\")).to eq("\\\\")
|
||||||
# note this test is different than for sh
|
# note this test is different than for sh
|
||||||
expect(subject.csh_quote("\n")).to eq("'\\\n'")
|
expect(subject.send(:csh_quote, "\n")).to eq("'\\\n'")
|
||||||
expect(subject.csh_quote("$")).to eq("\\$")
|
expect(subject.send(:csh_quote, "$")).to eq("\\$")
|
||||||
expect(subject.csh_quote("word")).to eq("word")
|
expect(subject.send(:csh_quote, "word")).to eq("word")
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "::prepend_path_in_shell_profile" do
|
describe "::prepend_path_in_profile" do
|
||||||
let(:path) { "/my/path" }
|
let(:path) { "/my/path" }
|
||||||
|
|
||||||
it "supports Tcsh" do
|
it "supports Tcsh" do
|
||||||
ENV["SHELL"] = "/bin/tcsh"
|
ENV["SHELL"] = "/bin/tcsh"
|
||||||
expect(subject.prepend_path_in_shell_profile(path))
|
expect(subject.prepend_path_in_profile(path))
|
||||||
.to start_with("echo 'setenv PATH #{path}:$")
|
.to start_with("echo 'setenv PATH #{path}:$")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "supports Bash" do
|
it "supports Bash" do
|
||||||
ENV["SHELL"] = "/bin/bash"
|
ENV["SHELL"] = "/bin/bash"
|
||||||
expect(subject.prepend_path_in_shell_profile(path))
|
expect(subject.prepend_path_in_profile(path))
|
||||||
.to start_with("echo 'export PATH=\"#{path}:$")
|
.to start_with("echo 'export PATH=\"#{path}:$")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "supports Fish" do
|
it "supports Fish" do
|
||||||
ENV["SHELL"] = "/usr/local/bin/fish"
|
ENV["SHELL"] = "/usr/local/bin/fish"
|
||||||
expect(subject.prepend_path_in_shell_profile(path))
|
expect(subject.prepend_path_in_profile(path))
|
||||||
.to start_with("echo 'set -g fish_user_paths \"#{path}\" $fish_user_paths' >>")
|
.to start_with("echo 'set -g fish_user_paths \"#{path}\" $fish_user_paths' >>")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,62 +1,24 @@
|
|||||||
module Utils
|
module Utils
|
||||||
SHELL_PROFILE_MAP = {
|
|
||||||
bash: "~/.bash_profile",
|
|
||||||
csh: "~/.cshrc",
|
|
||||||
fish: "~/.config/fish/config.fish",
|
|
||||||
ksh: "~/.kshrc",
|
|
||||||
sh: "~/.bash_profile",
|
|
||||||
tcsh: "~/.tcshrc",
|
|
||||||
zsh: "~/.zshrc",
|
|
||||||
}.freeze
|
|
||||||
|
|
||||||
module Shell
|
module Shell
|
||||||
UNSAFE_SHELL_CHAR = %r{([^A-Za-z0-9_\-.,:/@\n])}
|
module_function
|
||||||
|
|
||||||
# take a path and heuristically convert it
|
# take a path and heuristically convert it
|
||||||
# to a shell name, return nil if there's no match
|
# to a shell name, return nil if there's no match
|
||||||
def path_to_shell(path)
|
def from_path(path)
|
||||||
# we only care about the basename
|
# we only care about the basename
|
||||||
shell_name = File.basename(path)
|
shell_name = File.basename(path)
|
||||||
# handle possible version suffix like `zsh-5.2`
|
# handle possible version suffix like `zsh-5.2`
|
||||||
shell_name.sub!(/-.*\z/m, "")
|
shell_name.sub!(/-.*\z/m, "")
|
||||||
shell_name.to_sym if %w[bash csh fish ksh sh tcsh zsh].include?(shell_name)
|
shell_name.to_sym if %w[bash csh fish ksh sh tcsh zsh].include?(shell_name)
|
||||||
end
|
end
|
||||||
module_function :path_to_shell
|
|
||||||
|
|
||||||
def preferred_shell
|
def preferred
|
||||||
path_to_shell(ENV.fetch("SHELL", ""))
|
from_path(ENV.fetch("SHELL", ""))
|
||||||
end
|
end
|
||||||
module_function :preferred_shell
|
|
||||||
|
|
||||||
def parent_shell
|
def parent
|
||||||
path_to_shell(`ps -p #{Process.ppid} -o ucomm=`.strip)
|
from_path(`ps -p #{Process.ppid} -o ucomm=`.strip)
|
||||||
end
|
end
|
||||||
module_function :parent_shell
|
|
||||||
|
|
||||||
def csh_quote(str)
|
|
||||||
# ruby's implementation of shell_escape
|
|
||||||
str = str.to_s
|
|
||||||
return "''" if str.empty?
|
|
||||||
str = str.dup
|
|
||||||
# anything that isn't a known safe character is padded
|
|
||||||
str.gsub!(UNSAFE_SHELL_CHAR, "\\\\" + "\\1")
|
|
||||||
# newlines have to be specially quoted in csh
|
|
||||||
str.gsub!(/\n/, "'\\\n'")
|
|
||||||
str
|
|
||||||
end
|
|
||||||
module_function :csh_quote
|
|
||||||
|
|
||||||
def sh_quote(str)
|
|
||||||
# ruby's implementation of shell_escape
|
|
||||||
str = str.to_s
|
|
||||||
return "''" if str.empty?
|
|
||||||
str = str.dup
|
|
||||||
# anything that isn't a known safe character is padded
|
|
||||||
str.gsub!(UNSAFE_SHELL_CHAR, "\\\\" + "\\1")
|
|
||||||
str.gsub!(/\n/, "'\n'")
|
|
||||||
str
|
|
||||||
end
|
|
||||||
module_function :sh_quote
|
|
||||||
|
|
||||||
# quote values. quoting keys is overkill
|
# quote values. quoting keys is overkill
|
||||||
def export_value(shell, key, value)
|
def export_value(shell, key, value)
|
||||||
@ -72,24 +34,60 @@ module Utils
|
|||||||
"setenv #{key} #{csh_quote(value)};"
|
"setenv #{key} #{csh_quote(value)};"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
module_function :export_value
|
|
||||||
|
|
||||||
# return the shell profile file based on users' preferred shell
|
# return the shell profile file based on users' preferred shell
|
||||||
def shell_profile
|
def profile
|
||||||
SHELL_PROFILE_MAP.fetch(preferred_shell, "~/.bash_profile")
|
SHELL_PROFILE_MAP.fetch(preferred, "~/.bash_profile")
|
||||||
end
|
end
|
||||||
module_function :shell_profile
|
|
||||||
|
|
||||||
def prepend_path_in_shell_profile(path)
|
def prepend_path_in_profile(path)
|
||||||
case preferred_shell
|
case preferred
|
||||||
when :bash, :ksh, :sh, :zsh, nil
|
when :bash, :ksh, :sh, :zsh, nil
|
||||||
"echo 'export PATH=\"#{sh_quote(path)}:$PATH\"' >> #{shell_profile}"
|
"echo 'export PATH=\"#{sh_quote(path)}:$PATH\"' >> #{profile}"
|
||||||
when :csh, :tcsh
|
when :csh, :tcsh
|
||||||
"echo 'setenv PATH #{csh_quote(path)}:$PATH' >> #{shell_profile}"
|
"echo 'setenv PATH #{csh_quote(path)}:$PATH' >> #{profile}"
|
||||||
when :fish
|
when :fish
|
||||||
"echo 'set -g fish_user_paths \"#{sh_quote(path)}\" $fish_user_paths' >> #{shell_profile}"
|
"echo 'set -g fish_user_paths \"#{sh_quote(path)}\" $fish_user_paths' >> #{profile}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
module_function :prepend_path_in_shell_profile
|
|
||||||
|
private
|
||||||
|
|
||||||
|
SHELL_PROFILE_MAP = {
|
||||||
|
bash: "~/.bash_profile",
|
||||||
|
csh: "~/.cshrc",
|
||||||
|
fish: "~/.config/fish/config.fish",
|
||||||
|
ksh: "~/.kshrc",
|
||||||
|
sh: "~/.bash_profile",
|
||||||
|
tcsh: "~/.tcshrc",
|
||||||
|
zsh: "~/.zshrc",
|
||||||
|
}.freeze
|
||||||
|
|
||||||
|
UNSAFE_SHELL_CHAR = %r{([^A-Za-z0-9_\-.,:/@\n])}
|
||||||
|
|
||||||
|
module_function
|
||||||
|
|
||||||
|
def csh_quote(str)
|
||||||
|
# ruby's implementation of shell_escape
|
||||||
|
str = str.to_s
|
||||||
|
return "''" if str.empty?
|
||||||
|
str = str.dup
|
||||||
|
# anything that isn't a known safe character is padded
|
||||||
|
str.gsub!(UNSAFE_SHELL_CHAR, "\\\\" + "\\1")
|
||||||
|
# newlines have to be specially quoted in csh
|
||||||
|
str.gsub!(/\n/, "'\\\n'")
|
||||||
|
str
|
||||||
|
end
|
||||||
|
|
||||||
|
def sh_quote(str)
|
||||||
|
# ruby's implementation of shell_escape
|
||||||
|
str = str.to_s
|
||||||
|
return "''" if str.empty?
|
||||||
|
str = str.dup
|
||||||
|
# anything that isn't a known safe character is padded
|
||||||
|
str.gsub!(UNSAFE_SHELL_CHAR, "\\\\" + "\\1")
|
||||||
|
str.gsub!(/\n/, "'\n'")
|
||||||
|
str
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user