Module: Repology Private

Extended by:
Utils::Output::Mixin
Defined in:
utils/repology.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.

Repology API client.

Constant Summary collapse

HOMEBREW_CORE =

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.

"homebrew"
HOMEBREW_CASK =

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.

"homebrew_casks"

Class Method Summary collapse

Methods included from Utils::Output::Mixin

odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, pretty_deprecated, pretty_disabled, pretty_duration, pretty_installed, pretty_outdated, pretty_uninstalled

Class Method Details

.latest_version(repositories) ⇒ String, Version

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:



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'utils/repology.rb', line 60

def self.latest_version(repositories)
  # The status is "unique" when the package is present only in Homebrew, so
  # Repology has no way of knowing if the package is up-to-date.
  is_unique = repositories.find do |repo|
    repo["status"] == "unique"
  end.present?

  return "present only in Homebrew" if is_unique

  latest_version = repositories.find do |repo|
    repo["status"] == "newest"
  end

  # Repology cannot identify "newest" versions for packages without a version
  # scheme
  return "no latest version" if latest_version.blank?

  Version.new(T.must(latest_version["version"]))
end

.query_api(last_package_in_response = "", repository:) ⇒ Hash{String => T.untyped}

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:

  • last_package_in_response (String, nil) (defaults to: "")
  • repository (String)

Returns:



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'utils/repology.rb', line 17

def self.query_api(last_package_in_response = "", repository:)
  last_package_in_response += "/" if last_package_in_response.present?
  url = "https://repology.org/api/v1/projects/#{last_package_in_response}?inrepo=#{repository}&outdated=1"

  result = Utils::Curl.curl_output(
    "--silent", url.to_s,
    use_homebrew_curl: !Utils::Curl.curl_supports_tls13?
  )
  JSON.parse(result.stdout)
rescue
  if Homebrew::EnvConfig.developer?
    $stderr.puts result&.stderr
  else
    odebug result&.stderr.to_s
  end

  raise
end

.single_package_query(name, repository:) ⇒ Hash{String => T.untyped}?

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:



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'utils/repology.rb', line 37

def self.single_package_query(name, repository:)
  url = "https://repology.org/api/v1/project/#{name}"

  result = Utils::Curl.curl_output(
    "--location", "--silent", url.to_s,
    use_homebrew_curl: !Utils::Curl.curl_supports_tls13?
  )

  data = JSON.parse(result.stdout)
  { name => data }
rescue => e
  require "utils/backtrace"
  error_output = [result&.stderr, "#{e.class}: #{e}", Utils::Backtrace.clean(e)].compact
  if Homebrew::EnvConfig.developer?
    $stderr.puts(*error_output)
  else
    odebug(*error_output)
  end

  nil
end