Merge pull request #17548 from Homebrew/audit_min_os-fixes
cask/audit: support on_os blocks in audit_min_os
This commit is contained in:
commit
347529b6f8
@ -606,21 +606,30 @@ module Cask
|
|||||||
debug_messages = []
|
debug_messages = []
|
||||||
debug_messages << "Plist #{plist_min_os}" if plist_min_os
|
debug_messages << "Plist #{plist_min_os}" if plist_min_os
|
||||||
debug_messages << "Sparkle #{sparkle_min_os}" if sparkle_min_os
|
debug_messages << "Sparkle #{sparkle_min_os}" if sparkle_min_os
|
||||||
odebug "Minimum OS version: #{debug_messages.join(" | ")}" unless debug_messages.empty?
|
odebug "Detected minimum OS version: #{debug_messages.join(" | ")}" unless debug_messages.empty?
|
||||||
min_os = [plist_min_os, sparkle_min_os].compact.max
|
min_os = [plist_min_os, sparkle_min_os].compact.max
|
||||||
|
|
||||||
return if min_os.nil? || min_os <= HOMEBREW_MACOS_OLDEST_ALLOWED
|
return if min_os.nil? || min_os <= HOMEBREW_MACOS_OLDEST_ALLOWED
|
||||||
|
|
||||||
cask_min_os = cask.depends_on.macos&.version
|
cask_min_os = if cask.on_system_blocks_exist?
|
||||||
return if cask_min_os == min_os
|
cask.on_system_block_min_os
|
||||||
|
else
|
||||||
|
cask.depends_on.macos&.minimum_version
|
||||||
|
end
|
||||||
|
odebug "Declared minimum OS version: #{cask_min_os&.to_sym}"
|
||||||
|
return if cask_min_os&.to_sym == min_os.to_sym
|
||||||
|
|
||||||
min_os_symbol = if cask_min_os.present?
|
min_os_definition = if cask_min_os.present?
|
||||||
cask_min_os.to_sym.inspect
|
if cask.on_system_blocks_exist?
|
||||||
|
"a block with a minimum OS version of #{cask.on_system_block_min_os.inspect}"
|
||||||
|
else
|
||||||
|
cask_min_os.to_sym.inspect
|
||||||
|
end
|
||||||
else
|
else
|
||||||
"no minimum OS version"
|
"no minimum OS version"
|
||||||
end
|
end
|
||||||
add_error "Upstream defined #{min_os.to_sym.inspect} as the minimum OS version " \
|
add_error "Upstream defined #{min_os.to_sym.inspect} as the minimum OS version " \
|
||||||
"and the cask defined #{min_os_symbol}",
|
"and the cask declared #{min_os_definition}",
|
||||||
strict_only: true
|
strict_only: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -95,6 +95,7 @@ module Cask
|
|||||||
:livecheck,
|
:livecheck,
|
||||||
:livecheckable?,
|
:livecheckable?,
|
||||||
:on_system_blocks_exist?,
|
:on_system_blocks_exist?,
|
||||||
|
:on_system_block_min_os,
|
||||||
:depends_on_set_in_block?,
|
:depends_on_set_in_block?,
|
||||||
*ORDINARY_ARTIFACT_CLASSES.map(&:dsl_key),
|
*ORDINARY_ARTIFACT_CLASSES.map(&:dsl_key),
|
||||||
*ACTIVATABLE_ARTIFACT_CLASSES.map(&:dsl_key),
|
*ACTIVATABLE_ARTIFACT_CLASSES.map(&:dsl_key),
|
||||||
@ -104,7 +105,8 @@ module Cask
|
|||||||
extend Attrable
|
extend Attrable
|
||||||
include OnSystem::MacOSOnly
|
include OnSystem::MacOSOnly
|
||||||
|
|
||||||
attr_reader :cask, :token, :deprecation_date, :deprecation_reason, :disable_date, :disable_reason
|
attr_reader :cask, :token, :deprecation_date, :deprecation_reason, :disable_date, :disable_reason,
|
||||||
|
:on_system_block_min_os
|
||||||
|
|
||||||
attr_predicate :deprecated?, :disabled?, :livecheckable?, :on_system_blocks_exist?, :depends_on_set_in_block?
|
attr_predicate :deprecated?, :disabled?, :livecheckable?, :on_system_blocks_exist?, :depends_on_set_in_block?
|
||||||
|
|
||||||
|
|||||||
@ -130,6 +130,11 @@ module OnSystem
|
|||||||
os_condition = OnSystem.condition_from_method_name T.must(__method__)
|
os_condition = OnSystem.condition_from_method_name T.must(__method__)
|
||||||
return unless OnSystem.os_condition_met? os_condition, or_condition
|
return unless OnSystem.os_condition_met? os_condition, or_condition
|
||||||
|
|
||||||
|
@on_system_block_min_os = if or_condition == :or_older
|
||||||
|
MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED).to_sym
|
||||||
|
else
|
||||||
|
os_condition
|
||||||
|
end
|
||||||
@called_in_on_system_block = true
|
@called_in_on_system_block = true
|
||||||
result = block.call
|
result = block.call
|
||||||
@called_in_on_system_block = false
|
@called_in_on_system_block = false
|
||||||
|
|||||||
@ -61,6 +61,13 @@ class MacOSRequirement < Requirement
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def minimum_version
|
||||||
|
return MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED) if @comparator == "<=" || !version_specified?
|
||||||
|
return @version.min if @version.respond_to?(:to_ary)
|
||||||
|
|
||||||
|
@version
|
||||||
|
end
|
||||||
|
|
||||||
def allows?(other)
|
def allows?(other)
|
||||||
return true unless version_specified?
|
return true unless version_specified?
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@ require "requirements/macos_requirement"
|
|||||||
RSpec.describe MacOSRequirement do
|
RSpec.describe MacOSRequirement do
|
||||||
subject(:requirement) { described_class.new }
|
subject(:requirement) { described_class.new }
|
||||||
|
|
||||||
|
let(:macos_oldest_allowed) { MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED) }
|
||||||
let(:big_sur_major) { MacOSVersion.new("11.0") }
|
let(:big_sur_major) { MacOSVersion.new("11.0") }
|
||||||
|
|
||||||
describe "#satisfied?" do
|
describe "#satisfied?" do
|
||||||
@ -23,11 +24,26 @@ RSpec.describe MacOSRequirement do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
specify "#minimum_version" do
|
||||||
|
no_requirement = described_class.new
|
||||||
|
max_requirement = described_class.new([:big_sur], comparator: "<=")
|
||||||
|
min_requirement = described_class.new([:big_sur], comparator: ">=")
|
||||||
|
exact_requirement = described_class.new([:big_sur], comparator: "==")
|
||||||
|
range_requirement = described_class.new([[:monterey, :big_sur]], comparator: "==")
|
||||||
|
expect(no_requirement.minimum_version).to eq macos_oldest_allowed
|
||||||
|
expect(max_requirement.minimum_version).to eq macos_oldest_allowed
|
||||||
|
expect(min_requirement.minimum_version).to eq big_sur_major
|
||||||
|
expect(exact_requirement.minimum_version).to eq big_sur_major
|
||||||
|
expect(range_requirement.minimum_version).to eq big_sur_major
|
||||||
|
end
|
||||||
|
|
||||||
specify "#allows?" do
|
specify "#allows?" do
|
||||||
|
no_requirement = described_class.new
|
||||||
max_requirement = described_class.new([:mojave], comparator: "<=")
|
max_requirement = described_class.new([:mojave], comparator: "<=")
|
||||||
min_requirement = described_class.new([:catalina], comparator: ">=")
|
min_requirement = described_class.new([:catalina], comparator: ">=")
|
||||||
exact_requirement = described_class.new([:big_sur], comparator: "==")
|
exact_requirement = described_class.new([:big_sur], comparator: "==")
|
||||||
range_requirement = described_class.new([[:monterey, :big_sur]], comparator: "==")
|
range_requirement = described_class.new([[:monterey, :big_sur]], comparator: "==")
|
||||||
|
expect(no_requirement.allows?(big_sur_major)).to be true
|
||||||
expect(max_requirement.allows?(big_sur_major)).to be false
|
expect(max_requirement.allows?(big_sur_major)).to be false
|
||||||
expect(min_requirement.allows?(big_sur_major)).to be true
|
expect(min_requirement.allows?(big_sur_major)).to be true
|
||||||
expect(exact_requirement.allows?(big_sur_major)).to be true
|
expect(exact_requirement.allows?(big_sur_major)).to be true
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user