Class: Homebrew::Bundle::Cask Private

Inherits:
PackageType show all
Extended by:
Utils::Output::Mixin
Defined in:
bundle/cask.rb

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.

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_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable, pretty_warning

Methods inherited from PackageType

check, #checkable_entries, dump_supported?, #exit_early_check, #failure_reason, #find_actionable, #format_checkable, #full_check, inherited, install_supported?

Class Method Details

.cask_in_array?(cask, array) ⇒ 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)


135
136
137
138
139
# File 'bundle/cask.rb', line 135

def cask_in_array?(cask, array)
  return true if array.include?(cask)

  array.include?(Utils.name_from_full_name(cask))
end

.cask_installed?(cask) ⇒ 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)


142
143
144
145
146
147
148
149
150
151
152
153
# File 'bundle/cask.rb', line 142

def cask_installed?(cask)
  return true if cask_in_array?(cask, installed_casks)

  old_name = cask_oldnames[cask]
  old_name ||= cask_oldnames[Utils.name_from_full_name(cask)]
  return false unless old_name
  return false unless cask_in_array?(old_name, installed_casks)

  opoo "#{cask} was renamed to #{old_name}"

  true
end

.cask_installed_and_up_to_date?(cask, no_upgrade: false) ⇒ 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:

  • cask (String)
  • no_upgrade (Boolean) (defaults to: false)

Returns:

  • (Boolean)


127
128
129
130
131
132
# File 'bundle/cask.rb', line 127

def cask_installed_and_up_to_date?(cask, no_upgrade: false)
  return false unless cask_installed?(cask)
  return true if no_upgrade

  !cask_upgradable?(cask)
end

.cask_is_outdated_using_greedy?(cask_name) ⇒ 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)


185
186
187
188
189
190
191
192
# File 'bundle/cask.rb', line 185

def cask_is_outdated_using_greedy?(cask_name)
  return false unless Bundle.cask_installed?

  cask = casks.find { |installed_cask| installed_cask.to_s == cask_name }
  return false if cask.nil? || cask.pinned?

  cask.outdated?(greedy: true)
end

.cask_namesArray<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:



171
172
173
# File 'bundle/cask.rb', line 171

def cask_names
  @cask_names ||= casks.map(&:to_s)
end

.cask_oldnamesHash{String => 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:



214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'bundle/cask.rb', line 214

def cask_oldnames
  @cask_oldnames ||= casks.each_with_object({}) do |c, hash|
    oldnames = c.old_tokens
    next if oldnames.blank?

    oldnames.each do |oldname|
      hash[oldname] = c.full_name
      if (tap_name = Utils.tap_from_full_name(c.full_name))
        hash["#{tap_name}/#{oldname}"] = c.full_name
      end
    end
  end
end

.cask_upgradable?(cask) ⇒ 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)


156
157
158
# File 'bundle/cask.rb', line 156

def cask_upgradable?(cask)
  cask_in_array?(cask, outdated_casks)
end

.casksArray<::Cask::Cask>

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:



31
32
33
34
35
36
# File 'bundle/cask.rb', line 31

def casks
  return [] unless Bundle.cask_installed?

  require "cask/caskroom"
  @casks ||= T.let(::Cask::Caskroom.casks, T.nilable(T::Array[::Cask::Cask]))
end

.check_labelString

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
# File 'bundle/cask.rb', line 19

def check_label = "Cask"

.dump(describe: false) ⇒ 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:

  • describe (Boolean) (defaults to: false)

Returns:



195
196
197
198
199
200
201
202
203
204
# File 'bundle/cask.rb', line 195

def dump(describe: false)
  trusted_casks = Homebrew::Trust.trusted_entries(:cask)
  casks.map do |cask|
    description = "# #{cask.desc}\n" if describe && cask.desc.present?
    config = ", args: { #{explicit_s(cask.config)} }" if cask.config.present? && cask.config.explicit.present?
    caskline = "#{description}cask \"#{cask.full_name}\"#{config}"
    caskline += ", trusted: true" if trusted_casks.include?(cask.full_name)
    caskline
  end.join("\n")
end

.dump_output(describe: false, no_restart: false) ⇒ 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:

  • describe (Boolean) (defaults to: false)
  • no_restart (Boolean) (defaults to: false)

Returns:



207
208
209
210
211
# File 'bundle/cask.rb', line 207

def dump_output(describe: false, no_restart: false)
  _ = no_restart

  dump(describe:)
end

.fetchable_name(name, options = {}, no_upgrade: false) ⇒ 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:

Returns:



119
120
121
122
123
124
# File 'bundle/cask.rb', line 119

def fetchable_name(name, options = {}, no_upgrade: false)
  full_name = T.cast(options.fetch(:full_name, name), String)
  return unless installable_or_upgradable?(name, no_upgrade:, **options)

  full_name
end

.formula_dependencies(cask_list) ⇒ 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.

Parameters:

Returns:



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'bundle/cask.rb', line 229

def formula_dependencies(cask_list)
  return [] if cask_list.blank?

  require "cask/cask_loader"

  installed_cask_objects = casks
  cask_list.flat_map do |cask_name|
    cask = installed_cask_objects.find do |installed_cask|
      cask_name == installed_cask.to_s || cask_name == installed_cask.full_name
    end
    cask ||= begin
      ::Cask::CaskLoader.load(cask_name)
    rescue ::Cask::CaskUnavailableError
      nil
    end
    next unless cask

    cask.depends_on[:formula]
  end.compact
end

.install!(name, preinstall: true, no_upgrade: false, verbose: false, force: false, **options) ⇒ 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:

  • name (String)
  • preinstall (Boolean) (defaults to: true)
  • no_upgrade (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • force (Boolean) (defaults to: false)
  • options (T.untyped)

Returns:

  • (Boolean)


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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'bundle/cask.rb', line 64

def install!(name, preinstall: true, no_upgrade: false, verbose: false, force: false, **options)
  return true unless preinstall

  full_name = T.cast(options.fetch(:full_name, name), String)

  # Only fully-qualified names map to a tap, so unqualified tokens
  # cannot be meaningfully trusted.
  Homebrew::Trust.trust!(:cask, full_name) if options[:trusted] && Utils.full_name?(full_name)

  install_result = if cask_installed?(name) && upgrading?(no_upgrade, name, options)
    status = "#{options[:greedy] ? "may not be" : "not"} up-to-date"
    puts "Upgrading #{name} cask. It is installed but #{status}." if verbose
    Bundle.brew("upgrade", "--cask", full_name, verbose:)
  else
    args = options.fetch(:args, []).filter_map do |k, v|
      case v
      when TrueClass
        "--#{k}"
      when FalseClass, NilClass
        nil
      else
        "--#{k}=#{v}"
      end
    end

    args << "--force" if force
    args << "--adopt" unless args.include?("--force")
    args.uniq!

    with_args = " with #{args.join(" ")}" if args.present?
    puts "Installing #{name} cask#{with_args}. It is not currently installed." if verbose

    if Bundle.brew("install", "--cask", full_name, *args, verbose:)
      installed_casks << name
      true
    else
      false
    end
  end
  result = install_result

  if cask_installed?(name)
    postinstall_result = postinstall_change_state!(name:, options:, verbose:)
    result &&= postinstall_result
  end

  result
end

.install_verb(name, options = {}) ⇒ Object

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.



44
45
46
47
48
# File 'bundle/cask.rb', line 44

def install_verb(name, options = {})
  return "Installing" if !cask_installed?(name) || !upgrading?(false, name, options)

  "Upgrading"
end

.installable_or_upgradable?(name, no_upgrade: false, **options) ⇒ 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:

  • name (String)
  • no_upgrade (Boolean) (defaults to: false)
  • options (T.untyped)

Returns:

  • (Boolean)


114
115
116
# File 'bundle/cask.rb', line 114

def installable_or_upgradable?(name, no_upgrade: false, **options)
  !cask_installed?(name) || upgrading?(no_upgrade, name, options)
end

.installed_casksArray<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:



161
162
163
# File 'bundle/cask.rb', line 161

def installed_casks
  @installed_casks ||= cask_names
end

.outdated_cask_namesArray<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:



176
177
178
179
180
181
182
# File 'bundle/cask.rb', line 176

def outdated_cask_names
  return [] unless Bundle.cask_installed?

  casks.reject(&:pinned?)
       .select { |c| c.outdated?(greedy: false) }
       .map(&:to_s)
end

.outdated_casksArray<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:



166
167
168
# File 'bundle/cask.rb', line 166

def outdated_casks
  @outdated_casks ||= outdated_cask_names
end

.preinstall!(name, no_upgrade: false, verbose: false, **options) ⇒ 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:

  • name (String)
  • no_upgrade (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • options (T.untyped)

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
# File 'bundle/cask.rb', line 51

def preinstall!(name, no_upgrade: false, verbose: false, **options)
  if cask_installed?(name) && !upgrading?(no_upgrade, name, options)
    puts "Skipping install of #{name} cask. It is already installed." if verbose
    return false
  end

  true
end

.reset!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.

This method returns an undefined value.



22
23
24
25
26
27
28
# File 'bundle/cask.rb', line 22

def reset!
  @casks = T.let(nil, T.nilable(T::Array[::Cask::Cask]))
  @cask_names = T.let(nil, T.nilable(T::Array[String]))
  @cask_oldnames = T.let(nil, T.nilable(T::Hash[String, String]))
  @installed_casks = T.let(nil, T.nilable(T::Array[String]))
  @outdated_casks = T.let(nil, T.nilable(T::Array[String]))
end

.typeSymbol

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
# File 'bundle/cask.rb', line 16

def type = :cask

Instance Method Details

#installed_and_up_to_date?(cask, no_upgrade: false) ⇒ 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:

  • cask (Object)
  • no_upgrade (Boolean) (defaults to: false)

Returns:

  • (Boolean)


284
285
286
287
288
# File 'bundle/cask.rb', line 284

def installed_and_up_to_date?(cask, no_upgrade: false)
  raise "cask must be a String, got #{cask.class}: #{cask}" unless cask.is_a?(String)

  self.class.cask_installed_and_up_to_date?(cask, no_upgrade:)
end