Merge pull request #9021 from EricFromCanada/requirements-display
Update display of requirements
This commit is contained in:
commit
d6d38e35d4
@ -21,7 +21,7 @@ class OsxfuseRequirement < Requirement
|
||||
end
|
||||
|
||||
def message
|
||||
msg = "libfuse is required to install this formula.\n"
|
||||
msg = "libfuse is required for this software.\n"
|
||||
if libfuse_formula_exists?
|
||||
<<~EOS
|
||||
#{msg}Run `brew install libfuse` to install it.
|
||||
|
||||
@ -21,4 +21,8 @@ class OsxfuseRequirement < Requirement
|
||||
ENV.append_path "HOMEBREW_INCLUDE_PATHS", "/usr/local/include/osxfuse"
|
||||
end
|
||||
end
|
||||
|
||||
def message
|
||||
"FUSE for macOS is required for this software. #{super}"
|
||||
end
|
||||
end
|
||||
|
||||
@ -17,6 +17,6 @@ class X11Requirement < Requirement
|
||||
end
|
||||
|
||||
def message
|
||||
"XQuartz #{min_version} (or newer) is required to install this formula. #{super}"
|
||||
"XQuartz #{min_version} (or newer) is required for this software. #{super}"
|
||||
end
|
||||
end
|
||||
|
||||
@ -1772,7 +1772,7 @@ class Formula
|
||||
"name" => req.name,
|
||||
"cask" => req.cask,
|
||||
"download" => req.download,
|
||||
"version" => req.try(:version),
|
||||
"version" => req.try(:version) || req.try(:arch),
|
||||
"contexts" => req.tags,
|
||||
}
|
||||
end
|
||||
|
||||
@ -48,7 +48,7 @@ class Requirement
|
||||
if download
|
||||
s += <<~EOS
|
||||
You can download from:
|
||||
#{download}
|
||||
#{Formatter.url(download)}
|
||||
EOS
|
||||
end
|
||||
s
|
||||
@ -122,11 +122,11 @@ class Requirement
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}: #{name.inspect} #{tags.inspect}>"
|
||||
"#<#{self.class.name}: #{tags.inspect}>"
|
||||
end
|
||||
|
||||
def display_s
|
||||
name
|
||||
name.capitalize
|
||||
end
|
||||
|
||||
def mktemp(&block)
|
||||
|
||||
@ -9,6 +9,8 @@ require "requirement"
|
||||
class ArchRequirement < Requirement
|
||||
fatal true
|
||||
|
||||
attr_reader :arch
|
||||
|
||||
def initialize(tags)
|
||||
@arch = tags.shift
|
||||
super(tags)
|
||||
@ -16,13 +18,17 @@ class ArchRequirement < Requirement
|
||||
|
||||
satisfy(build_env: false) do
|
||||
case @arch
|
||||
when :x86_64 then Hardware::CPU.is_64_bit?
|
||||
when :intel, :ppc then Hardware::CPU.type == @arch
|
||||
when :x86_64 then Hardware::CPU.intel? && Hardware::CPU.is_64_bit?
|
||||
when :arm, :intel, :ppc then Hardware::CPU.type == @arch
|
||||
end
|
||||
end
|
||||
|
||||
def message
|
||||
"This formula requires an #{@arch} architecture."
|
||||
"The #{@arch} architecture is required for this software."
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}: arch=#{@arch.to_s.inspect} #{tags.inspect}>"
|
||||
end
|
||||
|
||||
def display_s
|
||||
|
||||
@ -39,13 +39,13 @@ class JavaRequirement < Requirement
|
||||
|
||||
def message
|
||||
version_string = " #{@version}" if @version
|
||||
s = "Java#{version_string} is required to install this formula.\n"
|
||||
s = "Java#{version_string} is required for this software.\n"
|
||||
s += suggestion
|
||||
s
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}: #{tags.inspect} version=#{@version.inspect}>"
|
||||
"#<#{self.class.name}: version=#{@version.inspect} #{tags.inspect}>"
|
||||
end
|
||||
|
||||
def display_s
|
||||
@ -55,9 +55,9 @@ class JavaRequirement < Requirement
|
||||
else
|
||||
">="
|
||||
end
|
||||
"#{name} #{op} #{version_without_plus}"
|
||||
"#{name.capitalize} #{op} #{version_without_plus}"
|
||||
else
|
||||
name
|
||||
name.capitalize
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -10,6 +10,6 @@ class LinuxRequirement < Requirement
|
||||
satisfy(build_env: false) { OS.linux? }
|
||||
|
||||
def message
|
||||
"Linux is required."
|
||||
"Linux is required for this software."
|
||||
end
|
||||
end
|
||||
|
||||
@ -41,11 +41,11 @@ class MacOSRequirement < Requirement
|
||||
end
|
||||
|
||||
def message(type: :formula)
|
||||
return "macOS is required." unless version_specified?
|
||||
return "macOS is required for this software." unless version_specified?
|
||||
|
||||
case @comparator
|
||||
when ">="
|
||||
"macOS #{@version.pretty_name} or newer is required."
|
||||
"macOS #{@version.pretty_name} or newer is required for this software."
|
||||
when "<="
|
||||
case type
|
||||
when :formula
|
||||
@ -59,19 +59,19 @@ class MacOSRequirement < Requirement
|
||||
else
|
||||
if @version.respond_to?(:to_ary)
|
||||
*versions, last = @version.map(&:pretty_name)
|
||||
return "macOS #{versions.join(", ")} or #{last} is required."
|
||||
return "macOS #{versions.join(", ")} or #{last} is required for this software."
|
||||
end
|
||||
|
||||
"macOS #{@version.pretty_name} is required."
|
||||
"macOS #{@version.pretty_name} is required for this software."
|
||||
end
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}: #{tags.inspect} version#{@comparator}#{@version}>"
|
||||
"#<#{self.class.name}: version#{@comparator}#{@version.to_s.inspect} #{tags.inspect}>"
|
||||
end
|
||||
|
||||
def display_s
|
||||
return "macOS is required" unless version_specified?
|
||||
return "macOS" unless version_specified?
|
||||
|
||||
"macOS #{@comparator} #{@version}"
|
||||
end
|
||||
|
||||
@ -7,8 +7,14 @@ require "requirement"
|
||||
#
|
||||
# @api private
|
||||
class OsxfuseRequirement < Requirement
|
||||
extend T::Sig
|
||||
cask "osxfuse"
|
||||
fatal true
|
||||
|
||||
sig { returns(String) }
|
||||
def display_s
|
||||
"FUSE"
|
||||
end
|
||||
end
|
||||
|
||||
require "extend/os/requirements/osxfuse_requirement"
|
||||
|
||||
@ -39,7 +39,7 @@ class X11Requirement < Requirement
|
||||
end
|
||||
|
||||
def message
|
||||
"X11 is required to install this formula, either Xorg #{min_version} or " \
|
||||
"X11 is required for this software, either Xorg #{min_version} or " \
|
||||
"xdpyinfo #{min_xdpyinfo_version}, or newer. #{super}"
|
||||
end
|
||||
|
||||
@ -48,10 +48,6 @@ class X11Requirement < Requirement
|
||||
|
||||
0
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}: #{tags.inspect}>"
|
||||
end
|
||||
end
|
||||
|
||||
require "extend/os/requirements/x11_requirement"
|
||||
|
||||
@ -46,7 +46,13 @@ class XcodeRequirement < Requirement
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}: #{tags.inspect} version=#{@version.inspect}>"
|
||||
"#<#{self.class.name}: version>=#{@version.inspect} #{tags.inspect}>"
|
||||
end
|
||||
|
||||
def display_s
|
||||
return name.capitalize unless @version
|
||||
|
||||
"#{name.capitalize} >= #{@version}"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -1,131 +0,0 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "cli/args"
|
||||
require "requirements/java_requirement"
|
||||
|
||||
describe JavaRequirement do
|
||||
subject { described_class.new([]) }
|
||||
|
||||
before do
|
||||
ENV["JAVA_HOME"] = nil
|
||||
end
|
||||
|
||||
describe "#message" do
|
||||
its(:message) { is_expected.to match(/Java is required to install this formula./) }
|
||||
end
|
||||
|
||||
describe "#inspect" do
|
||||
subject { described_class.new(%w[1.7+]) }
|
||||
|
||||
its(:inspect) { is_expected.to eq('#<JavaRequirement: [] version="1.7+">') }
|
||||
end
|
||||
|
||||
describe "#display_s" do
|
||||
context "without specific version" do
|
||||
its(:display_s) { is_expected.to eq("java") }
|
||||
end
|
||||
|
||||
context "with version 1.8" do
|
||||
subject { described_class.new(%w[1.8]) }
|
||||
|
||||
its(:display_s) { is_expected.to eq("java = 1.8") }
|
||||
end
|
||||
|
||||
context "with version 1.8+" do
|
||||
subject { described_class.new(%w[1.8+]) }
|
||||
|
||||
its(:display_s) { is_expected.to eq("java >= 1.8") }
|
||||
end
|
||||
end
|
||||
|
||||
describe "#satisfied?" do
|
||||
subject { described_class.new(%w[1.8]) }
|
||||
|
||||
it "returns false if no `java` executable can be found" do
|
||||
allow(File).to receive(:executable?).and_return(false)
|
||||
expect(subject).not_to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if #preferred_java returns a path" do
|
||||
allow(subject).to receive(:preferred_java).and_return(Pathname.new("/usr/bin/java"))
|
||||
expect(subject).to be_satisfied
|
||||
end
|
||||
|
||||
context "when #possible_javas contains paths" do
|
||||
let(:path) { mktmpdir }
|
||||
let(:java) { path/"java" }
|
||||
|
||||
def setup_java_with_version(version)
|
||||
IO.write java, <<~SH
|
||||
#!/bin/sh
|
||||
echo 'java version "#{version}"' 1>&2
|
||||
SH
|
||||
FileUtils.chmod "+x", java
|
||||
end
|
||||
|
||||
before do
|
||||
allow(subject).to receive(:possible_javas).and_return([java])
|
||||
end
|
||||
|
||||
context "and 1.7 is required" do
|
||||
subject { described_class.new(%w[1.7]) }
|
||||
|
||||
it "returns false if all are lower" do
|
||||
setup_java_with_version "1.6.0_5"
|
||||
expect(subject).not_to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if one is equal" do
|
||||
setup_java_with_version "1.7.0_5"
|
||||
expect(subject).to be_satisfied
|
||||
end
|
||||
|
||||
it "returns false if all are higher" do
|
||||
setup_java_with_version "1.8.0_5"
|
||||
expect(subject).not_to be_satisfied
|
||||
end
|
||||
end
|
||||
|
||||
context "and 1.7+ is required" do
|
||||
subject { described_class.new(%w[1.7+]) }
|
||||
|
||||
it "returns false if all are lower" do
|
||||
setup_java_with_version "1.6.0_5"
|
||||
expect(subject).not_to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if one is equal" do
|
||||
setup_java_with_version "1.7.0_5"
|
||||
expect(subject).to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if one is higher" do
|
||||
setup_java_with_version "1.8.0_5"
|
||||
expect(subject).to be_satisfied
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#suggestion" do
|
||||
context "without specific version" do
|
||||
its(:suggestion) { is_expected.to match(/brew cask install adoptopenjdk/) }
|
||||
its(:cask) { is_expected.to eq("adoptopenjdk") }
|
||||
end
|
||||
|
||||
context "with version 1.8" do
|
||||
subject { described_class.new(%w[1.8]) }
|
||||
|
||||
its(:suggestion) { is_expected.to match(%r{brew cask install homebrew/cask-versions/adoptopenjdk8}) }
|
||||
its(:cask) { is_expected.to eq("homebrew/cask-versions/adoptopenjdk8") }
|
||||
end
|
||||
|
||||
context "with version 1.8+" do
|
||||
subject { described_class.new(%w[1.8+]) }
|
||||
|
||||
its(:suggestion) { is_expected.to match(/brew cask install adoptopenjdk/) }
|
||||
its(:cask) { is_expected.to eq("adoptopenjdk") }
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1,33 +1,158 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "cli/args"
|
||||
require "requirements/java_requirement"
|
||||
|
||||
describe JavaRequirement do
|
||||
describe "initialize" do
|
||||
subject { described_class.new([]) }
|
||||
|
||||
before do
|
||||
ENV["JAVA_HOME"] = nil
|
||||
end
|
||||
|
||||
describe "#initialize" do
|
||||
it "parses '1.8' tag correctly" do
|
||||
req = described_class.new(["1.8"])
|
||||
expect(req.display_s).to eq("java = 1.8")
|
||||
expect(req.display_s).to eq("Java = 1.8")
|
||||
end
|
||||
|
||||
it "parses '9' tag correctly" do
|
||||
req = described_class.new(["9"])
|
||||
expect(req.display_s).to eq("java = 9")
|
||||
expect(req.display_s).to eq("Java = 9")
|
||||
end
|
||||
|
||||
it "parses '9+' tag correctly" do
|
||||
req = described_class.new(["9+"])
|
||||
expect(req.display_s).to eq("java >= 9")
|
||||
expect(req.display_s).to eq("Java >= 9")
|
||||
end
|
||||
|
||||
it "parses '11' tag correctly" do
|
||||
req = described_class.new(["11"])
|
||||
expect(req.display_s).to eq("java = 11")
|
||||
expect(req.display_s).to eq("Java = 11")
|
||||
end
|
||||
|
||||
it "parses bogus tag correctly" do
|
||||
req = described_class.new(["bogus1.8"])
|
||||
expect(req.display_s).to eq("java")
|
||||
expect(req.display_s).to eq("Java")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#message" do
|
||||
its(:message) { is_expected.to match(/Java is required for this software./) }
|
||||
end
|
||||
|
||||
describe "#inspect" do
|
||||
subject { described_class.new(%w[1.7+]) }
|
||||
|
||||
its(:inspect) { is_expected.to eq('#<JavaRequirement: version="1.7+" []>') }
|
||||
end
|
||||
|
||||
describe "#display_s" do
|
||||
context "without specific version" do
|
||||
its(:display_s) { is_expected.to eq("Java") }
|
||||
end
|
||||
|
||||
context "with version 1.8" do
|
||||
subject { described_class.new(%w[1.8]) }
|
||||
|
||||
its(:display_s) { is_expected.to eq("Java = 1.8") }
|
||||
end
|
||||
|
||||
context "with version 1.8+" do
|
||||
subject { described_class.new(%w[1.8+]) }
|
||||
|
||||
its(:display_s) { is_expected.to eq("Java >= 1.8") }
|
||||
end
|
||||
end
|
||||
|
||||
describe "#satisfied?" do
|
||||
subject(:requirement) { described_class.new(%w[1.8]) }
|
||||
|
||||
it "returns false if no `java` executable can be found" do
|
||||
allow(File).to receive(:executable?).and_return(false)
|
||||
expect(requirement).not_to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if #preferred_java returns a path" do
|
||||
allow(requirement).to receive(:preferred_java).and_return(Pathname.new("/usr/bin/java"))
|
||||
expect(requirement).to be_satisfied
|
||||
end
|
||||
|
||||
context "when #possible_javas contains paths" do
|
||||
let(:path) { mktmpdir }
|
||||
let(:java) { path/"java" }
|
||||
|
||||
def setup_java_with_version(version)
|
||||
IO.write java, <<~SH
|
||||
#!/bin/sh
|
||||
echo 'java version "#{version}"' 1>&2
|
||||
SH
|
||||
FileUtils.chmod "+x", java
|
||||
end
|
||||
|
||||
before do
|
||||
allow(requirement).to receive(:possible_javas).and_return([java])
|
||||
end
|
||||
|
||||
context "and 1.7 is required" do
|
||||
subject(:requirement) { described_class.new(%w[1.7]) }
|
||||
|
||||
it "returns false if all are lower" do
|
||||
setup_java_with_version "1.6.0_5"
|
||||
expect(requirement).not_to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if one is equal" do
|
||||
setup_java_with_version "1.7.0_5"
|
||||
expect(requirement).to be_satisfied
|
||||
end
|
||||
|
||||
it "returns false if all are higher" do
|
||||
setup_java_with_version "1.8.0_5"
|
||||
expect(requirement).not_to be_satisfied
|
||||
end
|
||||
end
|
||||
|
||||
context "and 1.7+ is required" do
|
||||
subject(:requirement) { described_class.new(%w[1.7+]) }
|
||||
|
||||
it "returns false if all are lower" do
|
||||
setup_java_with_version "1.6.0_5"
|
||||
expect(requirement).not_to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if one is equal" do
|
||||
setup_java_with_version "1.7.0_5"
|
||||
expect(requirement).to be_satisfied
|
||||
end
|
||||
|
||||
it "returns true if one is higher" do
|
||||
setup_java_with_version "1.8.0_5"
|
||||
expect(requirement).to be_satisfied
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#suggestion" do
|
||||
context "without specific version" do
|
||||
its(:suggestion) { is_expected.to match(/brew cask install adoptopenjdk/) }
|
||||
its(:cask) { is_expected.to eq("adoptopenjdk") }
|
||||
end
|
||||
|
||||
context "with version 1.8" do
|
||||
subject { described_class.new(%w[1.8]) }
|
||||
|
||||
its(:suggestion) { is_expected.to match(%r{brew cask install homebrew/cask-versions/adoptopenjdk8}) }
|
||||
its(:cask) { is_expected.to eq("homebrew/cask-versions/adoptopenjdk8") }
|
||||
end
|
||||
|
||||
context "with version 1.8+" do
|
||||
subject { described_class.new(%w[1.8+]) }
|
||||
|
||||
its(:suggestion) { is_expected.to match(/brew cask install adoptopenjdk/) }
|
||||
its(:cask) { is_expected.to eq("adoptopenjdk") }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -44,7 +44,7 @@ describe OsxfuseRequirement do
|
||||
|
||||
describe "#message" do
|
||||
it "prompts for installation of 'libfuse' on Linux", :needs_linux do
|
||||
expect(requirement.message).to match("libfuse is required to install this formula")
|
||||
expect(requirement.message).to match("libfuse is required for this software")
|
||||
end
|
||||
|
||||
it "prompts for installation of 'osxFuse' on macOS", :needs_macos do
|
||||
|
||||
@ -5,26 +5,28 @@ require "cli/args"
|
||||
require "requirements/x11_requirement"
|
||||
|
||||
describe X11Requirement do
|
||||
subject(:requirement) { described_class.new([]) }
|
||||
|
||||
let(:default_name) { "x11" }
|
||||
|
||||
describe "#name" do
|
||||
it "defaults to x11" do
|
||||
expect(subject.name).to eq(default_name)
|
||||
expect(requirement.name).to eq(default_name)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#eql?" do
|
||||
it "returns true if the requirements are equal" do
|
||||
other = described_class.new
|
||||
expect(subject).to eql(other)
|
||||
expect(requirement).to eql(other)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#modify_build_environment" do
|
||||
it "calls ENV#x11" do
|
||||
allow(subject).to receive(:satisfied?).and_return(true)
|
||||
allow(requirement).to receive(:satisfied?).and_return(true)
|
||||
expect(ENV).to receive(:x11)
|
||||
subject.modify_build_environment
|
||||
requirement.modify_build_environment
|
||||
end
|
||||
end
|
||||
|
||||
@ -32,12 +34,12 @@ describe X11Requirement do
|
||||
it "returns true if X11 is installed" do
|
||||
expect(MacOS::XQuartz).to receive(:version).and_return("2.7.5")
|
||||
expect(MacOS::XQuartz).to receive(:installed?).and_return(true)
|
||||
expect(subject).to be_satisfied
|
||||
expect(requirement).to be_satisfied
|
||||
end
|
||||
|
||||
it "returns false if X11 is not installed" do
|
||||
expect(MacOS::XQuartz).to receive(:installed?).and_return(false)
|
||||
expect(subject).not_to be_satisfied
|
||||
expect(requirement).not_to be_satisfied
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user