Class: MacOSRequirement Private

Inherits:
Requirement show all
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 both arrays so we can keep the deprecation/disabling code the same. Treat these like odeprecated/odisabled in terms of deprecation/disabling.

[
  :catalina,
  :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

Attributes inherited from Requirement

#cask, #download, #name, #tags

Class Method Summary collapse

Instance Method Summary collapse

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_cannot_install, 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

#env, #inherited

Methods included from Cachable

#cache, #clear_cache

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.

Parameters:

  • tags (T.untyped) (defaults to: [])
  • comparator (String) (defaults to: ">=")


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
91
92
93
94
95
96
# File 'requirements/macos_requirement.rb', line 66

def initialize(tags = [], comparator: ">=")
  @version = T.let(begin
    if comparator == "==" && tags.first.respond_to?(:map)
      tags.first.map { |s| MacOSVersion.from_symbol(s) }
    else
      MacOSVersion.from_symbol(tags.first) unless tags.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 tags.first.respond_to?(:reject)
      tags = [tags.first.reject { |s| s == e.version }, tags[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(tags.drop(1))
end

Instance Attribute Details

#comparatorString (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.

Returns:



16
17
18
# File 'requirements/macos_requirement.rb', line 16

def comparator
  @comparator
end

#versionMacOSVersion, ... (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.

Returns:



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.

Parameters:

Returns:



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
58
59
60
61
62
63
# File 'requirements/macos_requirement.rb', line 33

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) ||
         DISABLED_MACOS_VERSIONS.include?(first_arg) ||
         DEPRECATED_MACOS_VERSIONS.include?(first_arg))
    new([first_arg], comparator:)
  elsif (md = /^\s*(?<comparator><|>|[=<>]=)\s*:(?<version>\S+)\s*$/.match(first_arg_s)) &&
        (comparator = md[:comparator]) && (version = md[:version])
    replacement = if comparator == "<="
      "`depends_on maximum_macos: :#{version}`"
    elsif comparator == ">="
      "`depends_on macos: :#{version}`"
    end
    odeprecated "string comparison format for `depends_on macos:`", replacement
    new([version.to_sym], comparator:)
  elsif (md = /^\s*(?<comparator><|>|[=<>]=)\s*(?<version>\S+)\s*$/.match(first_arg_s)) &&
        (comparator = md[:comparator])
    odeprecated "string comparison format for `depends_on macos:`"
    new([md[:version]], 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.

Parameters:

Returns:

  • (Boolean)


132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'requirements/macos_requirement.rb', line 132

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 version.include?(other) if version.is_a?(Array)

    version == other
  end
end

#display_sString

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.

Returns:



169
170
171
172
173
174
175
176
177
# File 'requirements/macos_requirement.rb', line 169

def display_s
  if version_specified?
    version = @version
    version = version.join(" / ") if version.is_a?(Array)
    "macOS #{@comparator} #{version}"
  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.

Returns:

  • (Boolean)


109
# File 'requirements/macos_requirement.rb', line 109

def macos_version_satisfied? = false

#maximum_versionMacOSVersion?

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.

Returns:



122
123
124
125
126
127
128
129
# File 'requirements/macos_requirement.rb', line 122

def maximum_version
  return MacOSVersion.new(HOMEBREW_MACOS_NEWEST_UNSUPPORTED) if @comparator == ">=" || !version_specified?

  version = @version
  return version.max if 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.

Parameters:

  • type (Symbol) (defaults to: :formula)

Returns:



147
148
149
150
# File 'requirements/macos_requirement.rb', line 147

def message(type: :formula)
  subject = (type == :cask) ? "This cask" : "This formula"
  "#{subject} requires macOS."
end

#minimum_versionMacOSVersion?

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.

Returns:



112
113
114
115
116
117
118
119
# File 'requirements/macos_requirement.rb', line 112

def minimum_version
  return MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED) if @comparator == "<=" || !version_specified?

  version = @version
  return version.min if version.is_a?(Array)

  version
end

#to_hHash{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.

Returns:



180
181
182
183
184
185
186
187
# File 'requirements/macos_requirement.rb', line 180

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.

Parameters:

  • options (T.untyped)

Returns:



190
191
192
# File 'requirements/macos_requirement.rb', line 190

def to_json(options)
  to_h.to_json(options)
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.

Returns:

  • (Boolean)


99
100
101
# File 'requirements/macos_requirement.rb', line 99

def version_specified?
  @version.present?
end