Spec-Zone.ru › Homebrew

Модуль: Cask::Caskroom

Расширен модулем:
Utils::Output::Mixin
Определён в:
cask/caskroom.rb

Обзор

Этот модуль является частью внутреннего API. Этот модуль можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask и formula. Сторонним разработчикам следует по возможности избегать использования этого модуля, так как он может быть удалён или изменён без предупреждения.

Вспомогательные функции для работы с каталогом Caskroom.

Сводка констант свернуть

CASKFILE_EXTENSIONS =

Эта константа является частью внутреннего API. Эту константу можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask и formula. Сторонним разработчикам следует по возможности избегать использования этой константы, так как она может быть удалена или изменена без предупреждения.

%w[internal.jsonjsonrb].freeze

Сводка методов класса свернуть

  • .any_casks_installed? ⇒ Boolean приватный
  • .cask_installed?(token) ⇒ Boolean приватный
  • .cask_installed_caskfile(token, old_tokens: []) ⇒ Pathname? приватный
  • .cask_installed_version(token, old_tokens: []) ⇒ String? приватный
  • .caskroom_group_correct?(path) ⇒ Boolean приватный
  • .casks(config: nil) ⇒ Array<Cask> внутренний

    Получить все установленные cask.

  • .chgrp_path(path, sudo) ⇒ void приватный
  • .corrupt_cask_dirs ⇒ Array<String> приватный

    Вернуть токены каталогов Caskroom, в которых отсутствуют ожидаемые метаданные об установке.

  • .ensure_caskroom_exists ⇒ void приватный
  • .expected_caskroom_group ⇒ String приватный
  • .path ⇒ Pathname приватный
  • .tokens ⇒ Array<String> приватный

    Вернуть все токены установленных cask.

Методы, включённые из 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

Подробное описание методов класса

.any_casks_installed? ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


37
38
39
# File 'cask/caskroom.rb', line 37

def self.any_casks_installed?
  paths.any?
end

.cask_installed?(token) ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • token (String)

Возвращает:

  • (Boolean)


42
43
44
# File 'cask/caskroom.rb', line 42

def self.cask_installed?(token)
  !cask_installed_version(token).nil?
end

.cask_installed_caskfile(token, old_tokens: []) ⇒ Pathname?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • token (String)
  • old_tokens (Array<String>) (по умолчанию: [])

Возвращает:

  • (Pathname, nil)


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'cask/caskroom.rb', line 47

def self.cask_installed_caskfile(token, old_tokens: [])
  # Check if the cask is installed with an old name.
  [token, *old_tokens].map { |cask_token| token_from_full_token(cask_token) }.uniq.each do |cask_token|
    caskroom_path = path/cask_token
    next if !caskroom_path.directory? || caskroom_path.symlink?

    timestamped_path = Pathname.glob((caskroom_path/".metadata/*/*").to_s).max_by { |p| p.basename.to_s }
    next unless timestamped_path

    caskfile = CASKFILE_EXTENSIONS.map { |ext| timestamped_path/"Casks/#{cask_token}.#{ext}" }
                                  .find(&:exist?)
    return caskfile if caskfile
  end

  nil
end

.cask_installed_version(token, old_tokens: []) ⇒ String?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • token (String)
  • old_tokens (Array<String>) (по умолчанию: [])

Возвращает:

  • (String, nil)


65
66
67
68
69
# File 'cask/caskroom.rb', line 65

def self.cask_installed_version(token, old_tokens: [])
  return unless (caskfile = cask_installed_caskfile(token, old_tokens:))

  caskfile.dirname.dirname.dirname.basename.to_s
end

.caskroom_group_correct?(path) ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • path (Pathname)

Возвращает:

  • (Boolean)


114
115
116
117
118
119
# File 'cask/caskroom.rb', line 114

def self.caskroom_group_correct?(path)
  group = Etc.getgrnam(expected_caskroom_group)
  return false if group.nil?

  path.stat.gid == group.gid
end

.casks(config: nil) ⇒ Array<Cask>

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask и formula. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Получить все установленные cask.

Параметры:

  • config (Config, nil) (по умолчанию: nil)

Возвращает:

  • (Array<Cask>)


130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'cask/caskroom.rb', line 130

def self.casks(config: nil)
  tokens.sort.filter_map do |token|
    # This is nested so that the rescue can catch errors from both branches
    begin
      CaskLoader.load_prefer_installed(token, config:, warn: false)
    rescue TapCaskAmbiguityError => e
      e.loaders.fetch(0).load(config:)
    end
  rescue Homebrew::UntrustedTapError
    # If the tap is untrusted the only place we can load the cask from is the installed cask file, if it exists.
    begin
      CaskLoader::FromInstalledPathLoader.try_new(token, warn: false)&.load(config:)
    rescue
      nil
    end
  rescue
    # Don't blow up because of a single unavailable cask.
    nil
  end.select(&:installed?)
end

.chgrp_path(path, sudo) ⇒ void

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • path (Pathname)
  • sudo (Boolean)


109
110
111
# File 'cask/caskroom.rb', line 109

def self.chgrp_path(path, sudo)
  SystemCommand.run("chgrp", args: [expected_caskroom_group, path], sudo:)
end

.corrupt_cask_dirs ⇒ Array<String>

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Вернуть токены каталогов Caskroom, в которых отсутствуют ожидаемые метаданные об установке.

Возвращает:

  • (Array<String>)


73
74
75
# File 'cask/caskroom.rb', line 73

def self.corrupt_cask_dirs
  paths.filter_map { |p| p.basename.to_s unless cask_with_metadata?(p) }
end

.ensure_caskroom_exists ⇒ void

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'cask/caskroom.rb', line 91

def self.ensure_caskroom_exists
  return if path.exist?

  sudo = !path.parent.writable?

  if sudo && !ENV.key?("SUDO_ASKPASS") && $stdout.tty?
    ohai "Creating Caskroom directory: #{path}",
         "We'll set permissions properly so we won't need sudo in the future."
  end

  SystemCommand.run("mkdir", args: ["-p", path], sudo:)
  SystemCommand.run("chmod", args: ["g+rwx", path], sudo:)
  SystemCommand.run("chown", args: [User.current.to_s, path], sudo:)

  chgrp_path(path, sudo) unless caskroom_group_correct?(path)
end

.expected_caskroom_group ⇒ String

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


122
123
124
# File 'cask/caskroom.rb', line 122

def self.expected_caskroom_group
  "admin"
end

.path ⇒ Pathname

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Pathname)


17
18
19
# File 'cask/caskroom.rb', line 17

def self.path
  @path ||= T.let(HOMEBREW_PREFIX/"Caskroom", T.nilable(Pathname))
end

.tokens ⇒ Array<String>

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Вернуть все токены установленных cask.

Возвращает:

  • (Array<String>)


32
33
34
# File 'cask/caskroom.rb', line 32

def self.tokens
  paths.map { |path| path.basename.to_s }
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Cask/Caskroom.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API