Class: MacOSRequirement Private
- Inherits:
-
Requirement
- Object
- Requirement
- MacOSRequirement
- Extended by:
- Utils::Output::Mixin
- Includes:
- OS::Mac::MacOSRequirement
- Defined in:
- requirements/macos_requirement.rb
Overview
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
A requirement on macOS.
Constant Summary collapse
- Cache =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
type_template { { fixed: T::Hash[String, T.untyped] } }
- DISABLED_MACOS_VERSIONS =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
Keep these around as empty arrays so we can keep the deprecation/disabling code the same. Treat these like odeprecated/odisabled in terms of deprecation/disabling.
[ :mojave, :high_sierra, :sierra, :el_capitan, ].freeze
- DEPRECATED_MACOS_VERSIONS =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
T.let([].freeze, T::Array[Symbol])
Constants included from Dependable
Dependable::KEEP_BUT_PRUNE_RECURSIVE_DEPS, Dependable::PRUNE, Dependable::RESERVED_TAGS, Dependable::SKIP
Instance Attribute Summary collapse
- #comparator ⇒ String readonly private
- #version ⇒ MacOSVersion, ... readonly private
Attributes inherited from Requirement
#cask, #download, #name, #tags
Class Method Summary collapse
Instance Method Summary collapse
- #allows?(other) ⇒ Boolean private
- #display_s ⇒ String private
- #initialize(tags = [], comparator: ">=") ⇒ void constructor private
- #macos_version_satisfied? ⇒ Boolean private
- #maximum_version ⇒ MacOSVersion? private
- #message(type: :formula) ⇒ String private
- #minimum_version ⇒ MacOSVersion? private
- #to_h ⇒ Hash{String => Array<String>} private
- #to_json(options) ⇒ String private
- #version_specified? ⇒ Boolean private
Methods included from Utils::Output::Mixin
issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_unmarked, pretty_upgradable, pretty_warning
Methods inherited from Requirement
cask, download, #env, env, #env_proc, expand, fatal, #fatal?, inherited, #mktemp, #modify_build_environment, #option_names, prune?, #satisfied?, #satisfied_result_parent, satisfy, #tap, #which
Methods included from BuildEnvironment::DSL
Methods included from Cachable
Methods included from Dependable
#build?, #implicit?, #no_linkage?, #option_names, #option_tags, #optional?, #options, #prune_from_option?, #prune_if_build_and_not_dependent?, #recommended?, #required?, #tags, #test?
Constructor Details
#initialize(tags = [], comparator: ">=") ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'requirements/macos_requirement.rb', line 60 def initialize( = [], comparator: ">=") @version = T.let(begin if comparator == "==" && .first.respond_to?(:map) .first.map { |s| MacOSVersion.from_symbol(s) } else MacOSVersion.from_symbol(.first) unless .empty? end rescue MacOSVersion::Error => e if DISABLED_MACOS_VERSIONS.include?(e.version) # This odisabled should stick around indefinitely. odisabled "`depends_on macos: :#{e.version}`" elsif DEPRECATED_MACOS_VERSIONS.include?(e.version) # This odeprecated should stick around indefinitely. odeprecated "`depends_on macos: :#{e.version}`" else raise end # Array of versions: remove the bad ones and try again. if .first.respond_to?(:reject) = [.first.reject { |s| s == e.version }, [1..]] retry end # Otherwise fallback to the oldest allowed if comparator is >=. MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED) if comparator == ">=" end, T.nilable(T.any(MacOSVersion, T::Array[MacOSVersion]))) @comparator = comparator super(.drop(1)) end |
Instance Attribute Details
#comparator ⇒ String (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
16 17 18 |
# File 'requirements/macos_requirement.rb', line 16 def comparator @comparator end |
#version ⇒ MacOSVersion, ... (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
19 20 21 |
# File 'requirements/macos_requirement.rb', line 19 def version @version end |
Class Method Details
.parse(args, comparator:) ⇒ MacOSRequirement
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'requirements/macos_requirement.rb', line 32 def self.parse(args, comparator:) first_arg = args.first first_arg_s = first_arg&.to_s if first_arg == :any new elsif args.count > 1 new([args], comparator: "==") elsif first_arg.is_a?(Symbol) && MacOSVersion::SYMBOLS.key?(first_arg) new([first_arg], comparator:) elsif (md = /^\s*(?<comparator><|>|[=<>]=)\s*:(?<version>\S+)\s*$/.match(first_arg_s)) replacement = if md[:comparator] == "<=" "`depends_on maximum_macos: :#{md[:version]}`" elsif md[:comparator] == ">=" "`depends_on macos: :#{md[:version]}`" end odeprecated "string comparison format for `depends_on macos:`", replacement new([T.must(md[:version]).to_sym], comparator: T.must(md[:comparator])) elsif (md = /^\s*(?<comparator><|>|[=<>]=)\s*(?<version>\S+)\s*$/.match(first_arg_s)) odeprecated "string comparison format for `depends_on macos:`" new([md[:version]], comparator: T.must(md[:comparator])) else odeprecated "strict symbol format for `depends_on macos:`" new([first_arg], comparator: "==") end end |
Instance Method Details
#allows?(other) ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'requirements/macos_requirement.rb', line 122 def allows?(other) return true unless version_specified? version = @version case @comparator when ">=" then other >= T.cast(version, MacOSVersion) when "<=" then other <= T.cast(version, MacOSVersion) else return T.unsafe(version).include?(other) if version.respond_to?(:to_ary) || version.is_a?(Array) version == other end end |
#display_s ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
159 160 161 162 163 164 165 166 167 168 169 |
# File 'requirements/macos_requirement.rb', line 159 def display_s if version_specified? if @version.respond_to?(:to_ary) || @version.is_a?(Array) "macOS #{@comparator} #{T.unsafe(@version).join(" / ")}" else "macOS #{@comparator} #{@version}" end else "macOS" end end |
#macos_version_satisfied? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
103 |
# File 'requirements/macos_requirement.rb', line 103 def macos_version_satisfied? = false |
#maximum_version ⇒ MacOSVersion?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
114 115 116 117 118 119 |
# File 'requirements/macos_requirement.rb', line 114 def maximum_version return MacOSVersion.new(HOMEBREW_MACOS_NEWEST_UNSUPPORTED) if @comparator == ">=" || !version_specified? return T.unsafe(@version).max if @version.respond_to?(:to_ary) || @version.is_a?(Array) @version end |
#message(type: :formula) ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
137 138 139 140 |
# File 'requirements/macos_requirement.rb', line 137 def (type: :formula) subject = (type == :cask) ? "This cask" : "This formula" "#{subject} requires macOS." end |
#minimum_version ⇒ MacOSVersion?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
106 107 108 109 110 111 |
# File 'requirements/macos_requirement.rb', line 106 def minimum_version return MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED) if @comparator == "<=" || !version_specified? return T.unsafe(@version).min if @version.respond_to?(:to_ary) || @version.is_a?(Array) @version end |
#to_h ⇒ Hash{String => Array<String>}
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
172 173 174 175 176 177 178 179 |
# File 'requirements/macos_requirement.rb', line 172 def to_h return {} unless version_specified? comp = @comparator.to_s return { comp => @version.map(&:to_s) } if @version.is_a?(Array) { comp => [@version.to_s] } end |
#to_json(options) ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
182 183 184 |
# File 'requirements/macos_requirement.rb', line 182 def to_json() to_h.to_json() end |
#version_specified? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
93 94 95 |
# File 'requirements/macos_requirement.rb', line 93 def version_specified? @version.present? end |