Module: Homebrew::Livecheck::SkipConditions Private

Includes:
Kernel
Defined in:
livecheck/skip_conditions.rb,
livecheck/livecheck.rbi

Overview

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

The Livecheck::SkipConditions module primarily contains methods that check for various formula/cask/resource conditions where a check should be skipped.

Constant Summary collapse

FORMULA_CHECKS =

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.

Skip conditions for formulae.

[
  :package_or_resource_skip,
  :formula_head_only,
  :formula_deprecated,
  :formula_disabled,
  :formula_versioned,
].freeze
CASK_CHECKS =

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.

Skip conditions for casks.

[
  :package_or_resource_skip,
  :cask_discontinued,
  :cask_deprecated,
  :cask_disabled,
  :cask_extract_plist,
  :cask_version_latest,
  :cask_url_unversioned,
].freeze
RESOURCE_CHECKS =

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.

Skip conditions for resources.

[
  :package_or_resource_skip,
].freeze

Class Method Summary collapse

Methods included from Kernel

#disk_usage_readable, #ensure_executable!, #ensure_formula_installed!, #exec_browser, #exec_editor, #ignore_interrupts, #interactive_shell, #number_readable, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #paths, #pretty_duration, #pretty_installed, #pretty_outdated, #pretty_uninstalled, #quiet_system, #redact_secrets, #redirect_stdout, #require?, #safe_system, #tap_and_name_comparison, #truncate_text_to_approximate_size, #which, #which_all, #which_editor, #with_custom_locale, #with_env, #with_homebrew_path

Class Method Details

.cask_deprecated(cask, livecheckable, full_name: false, verbose: false) ⇒ Hash

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 (Cask::Cask)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



134
135
136
137
138
# File 'livecheck/skip_conditions.rb', line 134

def cask_deprecated(cask, livecheckable, full_name: false, verbose: false)
  return {} if !cask.deprecated? || livecheckable

  Livecheck.status_hash(cask, "deprecated", full_name:, verbose:)
end

.cask_disabled(cask, livecheckable, full_name: false, verbose: false) ⇒ Hash

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 (Cask::Cask)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



148
149
150
151
152
# File 'livecheck/skip_conditions.rb', line 148

def cask_disabled(cask, livecheckable, full_name: false, verbose: false)
  return {} if !cask.disabled? || livecheckable

  Livecheck.status_hash(cask, "disabled", full_name:, verbose:)
end

.cask_discontinued(cask, livecheckable, full_name: false, verbose: false) ⇒ Hash

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 (Cask::Cask)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



120
121
122
123
124
# File 'livecheck/skip_conditions.rb', line 120

def cask_discontinued(cask, livecheckable, full_name: false, verbose: false)
  return {} if !cask.discontinued? || livecheckable

  Livecheck.status_hash(cask, "discontinued", full_name:, verbose:)
end

.cask_extract_plist(cask, _livecheckable, full_name: false, verbose: false, extract_plist: false) ⇒ Hash

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 (Cask::Cask)
  • _livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • extract_plist (Boolean) (defaults to: false)

Returns:



163
164
165
166
167
168
169
170
171
172
173
# File 'livecheck/skip_conditions.rb', line 163

def cask_extract_plist(cask, _livecheckable, full_name: false, verbose: false, extract_plist: false)
  return {} if extract_plist || cask.livecheck.strategy != :extract_plist

  Livecheck.status_hash(
    cask,
    "skipped",
    ["Use `--extract-plist` to enable checking multiple casks with ExtractPlist strategy"],
    full_name:,
    verbose:,
  )
end

.cask_url_unversioned(cask, livecheckable, full_name: false, verbose: false) ⇒ Hash

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 (Cask::Cask)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



197
198
199
200
201
# File 'livecheck/skip_conditions.rb', line 197

def cask_url_unversioned(cask, livecheckable, full_name: false, verbose: false)
  return {} if !(cask.present? && cask.url&.unversioned?) || livecheckable

  Livecheck.status_hash(cask, "unversioned", full_name:, verbose:)
end

.cask_version_latest(cask, livecheckable, full_name: false, verbose: false) ⇒ Hash

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 (Cask::Cask)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



183
184
185
186
187
# File 'livecheck/skip_conditions.rb', line 183

def cask_version_latest(cask, livecheckable, full_name: false, verbose: false)
  return {} if !(cask.present? && cask.version&.latest?) || livecheckable

  Livecheck.status_hash(cask, "latest", full_name:, verbose:)
end

.formula_deprecated(formula, livecheckable, full_name: false, verbose: false) ⇒ Hash

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:

  • formula (Formula)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



78
79
80
81
82
# File 'livecheck/skip_conditions.rb', line 78

def formula_deprecated(formula, livecheckable, full_name: false, verbose: false)
  return {} if !formula.deprecated? || livecheckable

  Livecheck.status_hash(formula, "deprecated", full_name:, verbose:)
end

.formula_disabled(formula, livecheckable, full_name: false, verbose: false) ⇒ Hash

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:

  • formula (Formula)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



92
93
94
95
96
# File 'livecheck/skip_conditions.rb', line 92

def formula_disabled(formula, livecheckable, full_name: false, verbose: false)
  return {} if !formula.disabled? || livecheckable

  Livecheck.status_hash(formula, "disabled", full_name:, verbose:)
end

.formula_head_only(formula, _livecheckable, full_name: false, verbose: false) ⇒ Hash

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:

  • formula (Formula)
  • _livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



58
59
60
61
62
63
64
65
66
67
68
# File 'livecheck/skip_conditions.rb', line 58

def formula_head_only(formula, _livecheckable, full_name: false, verbose: false)
  return {} if !formula.head_only? || formula.any_version_installed?

  Livecheck.status_hash(
    formula,
    "error",
    ["HEAD only formula must be installed to be livecheckable"],
    full_name:,
    verbose:,
  )
end

.formula_versioned(formula, livecheckable, full_name: false, verbose: false) ⇒ Hash

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:

  • formula (Formula)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



106
107
108
109
110
# File 'livecheck/skip_conditions.rb', line 106

def formula_versioned(formula, livecheckable, full_name: false, verbose: false)
  return {} if !formula.versioned_formula? || livecheckable

  Livecheck.status_hash(formula, "versioned", full_name:, verbose:)
end

.package_or_resource_skip(package_or_resource, livecheckable, full_name: false, verbose: false) ⇒ Hash

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:

  • package_or_resource (Formula, Cask::Cask, Resource)
  • livecheckable (Boolean)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)

Returns:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'livecheck/skip_conditions.rb', line 21

def package_or_resource_skip(package_or_resource, livecheckable, full_name: false, verbose: false)
  formula = package_or_resource if package_or_resource.is_a?(Formula)

  if (stable_url = formula&.stable&.url)
    stable_is_gist = stable_url.match?(%r{https?://gist\.github(?:usercontent)?\.com/}i)
    stable_from_google_code_archive = stable_url.match?(
      %r{https?://storage\.googleapis\.com/google-code-archive-downloads/}i,
    )
    stable_from_internet_archive = stable_url.match?(%r{https?://web\.archive\.org/}i)
  end

  skip_message = if package_or_resource.livecheck.skip_msg.present?
    package_or_resource.livecheck.skip_msg
  elsif !livecheckable
    if stable_from_google_code_archive
      "Stable URL is from Google Code Archive"
    elsif stable_from_internet_archive
      "Stable URL is from Internet Archive"
    elsif stable_is_gist
      "Stable URL is a GitHub Gist"
    end
  end

  return {} if !package_or_resource.livecheck.skip? && skip_message.blank?

  skip_messages = skip_message ? [skip_message] : nil
  Livecheck.status_hash(package_or_resource, "skipped", skip_messages, full_name:, verbose:)
end

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.

Prints default livecheck output in relation to skip conditions.

Parameters:



320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
# File 'livecheck/skip_conditions.rb', line 320

def print_skip_information(skip_hash)
  return unless skip_hash.is_a?(Hash)

  name = if skip_hash[:formula].is_a?(String)
    skip_hash[:formula]
  elsif skip_hash[:cask].is_a?(String)
    skip_hash[:cask]
  elsif skip_hash[:resource].is_a?(String)
    "  #{skip_hash[:resource]}"
  end
  return unless name

  if skip_hash[:messages].is_a?(Array) && skip_hash[:messages].count.positive?
    # TODO: Handle multiple messages, only if needed in the future
    if skip_hash[:status] == "skipped"
      puts "#{Tty.red}#{name}#{Tty.reset}: skipped - #{skip_hash[:messages][0]}"
    else
      puts "#{Tty.red}#{name}#{Tty.reset}: #{skip_hash[:messages][0]}"
    end
  elsif skip_hash[:status].present?
    puts "#{Tty.red}#{name}#{Tty.reset}: #{skip_hash[:status]}"
  end
end

.referenced_skip_information(livecheck_package_or_resource, original_package_or_resource_name, full_name: false, verbose: false, extract_plist: true) ⇒ Hash?

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.

Skip conditions for formulae/casks/resources referenced in a livecheck block are treated differently than normal. We only respect certain skip conditions (returning the related hash) and others are treated as errors.

Parameters:

  • livecheck_package_or_resource (Formula, Cask::Cask, Resource)
  • original_package_or_resource_name (String)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • extract_plist (Boolean) (defaults to: true)

Returns:



278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
# File 'livecheck/skip_conditions.rb', line 278

def referenced_skip_information(
  livecheck_package_or_resource,
  original_package_or_resource_name,
  full_name: false,
  verbose: false,
  extract_plist: true
)
  skip_info = SkipConditions.skip_information(
    livecheck_package_or_resource,
    full_name:,
    verbose:,
    extract_plist:,
  )
  return if skip_info.blank?

  referenced_name = Livecheck.package_or_resource_name(livecheck_package_or_resource, full_name:)
  referenced_type = case livecheck_package_or_resource
  when Formula
    :formula
  when Cask::Cask
    :cask
  when Resource
    :resource
  end

  if skip_info[:status] != "error" &&
     !(skip_info[:status] == "skipped" && livecheck_package_or_resource.livecheck.skip?)
    error_msg_end = if skip_info[:status] == "skipped"
      "automatically skipped"
    else
      "skipped as #{skip_info[:status]}"
    end

    raise "Referenced #{referenced_type} (#{referenced_name}) is #{error_msg_end}"
  end

  skip_info[referenced_type] = original_package_or_resource_name
  skip_info
end

.skip_information(package_or_resource, full_name: false, verbose: false, extract_plist: true) ⇒ Hash

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.

If a formula/cask/resource should be skipped, we return a hash from Livecheck#status_hash, which contains a status type and sometimes error messages.

Parameters:

  • package_or_resource (Formula, Cask::Cask, Resource)
  • full_name (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • extract_plist (Boolean) (defaults to: true)

Returns:



239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'livecheck/skip_conditions.rb', line 239

def skip_information(package_or_resource, full_name: false, verbose: false, extract_plist: true)
  livecheckable = package_or_resource.livecheckable?

  checks = case package_or_resource
  when Formula
    FORMULA_CHECKS
  when Cask::Cask
    CASK_CHECKS
  when Resource
    RESOURCE_CHECKS
  end
  return {} unless checks

  checks.each do |method_name|
    skip_hash = case method_name
    when :cask_extract_plist
      send(method_name, package_or_resource, livecheckable, full_name:, verbose:, extract_plist:)
    else
      send(method_name, package_or_resource, livecheckable, full_name:, verbose:)
    end
    return skip_hash if skip_hash.present?
  end

  {}
end