Module: Homebrew::Livecheck::SkipConditions Private

Defined in:
livecheck/skip_conditions.rb

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_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

Class Method Details

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

  • (Hash)


122
123
124
125
126
# File 'livecheck/skip_conditions.rb', line 122

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

  Livecheck.status_hash(cask, "discontinued", full_name: full_name, verbose: 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:

  • (Hash)


150
151
152
153
154
# File 'livecheck/skip_conditions.rb', line 150

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: full_name, verbose: 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:

  • (Hash)


136
137
138
139
140
# File 'livecheck/skip_conditions.rb', line 136

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: full_name, verbose: 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:

  • (Hash)


80
81
82
83
84
# File 'livecheck/skip_conditions.rb', line 80

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

  Livecheck.status_hash(formula, "deprecated", full_name: full_name, verbose: 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:

  • (Hash)


94
95
96
97
98
# File 'livecheck/skip_conditions.rb', line 94

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

  Livecheck.status_hash(formula, "disabled", full_name: full_name, verbose: 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:

  • (Hash)


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

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: full_name,
    verbose:   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:

  • (Hash)


108
109
110
111
112
# File 'livecheck/skip_conditions.rb', line 108

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

  Livecheck.status_hash(formula, "versioned", full_name: full_name, verbose: 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:

  • (Hash)


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
49
50
# File 'livecheck/skip_conditions.rb', line 23

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: full_name, verbose: 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:

  • skip_hash (Hash)


261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
# File 'livecheck/skip_conditions.rb', line 261

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) ⇒ 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)

Returns:

  • (Hash, nil)


221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'livecheck/skip_conditions.rb', line 221

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

  referenced_name = Livecheck.package_or_resource_name(livecheck_package_or_resource, full_name: 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) ⇒ 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)

Returns:

  • (Hash)


188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'livecheck/skip_conditions.rb', line 188

def skip_information(package_or_resource, full_name: false, verbose: false)
  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 = send(method_name, package_or_resource, livecheckable, full_name: full_name, verbose: verbose)
    return skip_hash if skip_hash.present?
  end

  {}
end