Класс: Resource Приватный
- Наследует:
- Object
- Object
- Resource
- Подключает:
- Downloadable, FileUtils, OnSystem::MacOSAndLinux, Utils::Output::Mixin
- Определён в:
- resource.rb
Обзор
Этот класс является частью приватного API. Этот класс можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Resource — основное представление внешнего ресурса. Основная загрузка формулы, наряду с другими объявленными ресурсами, представлена экземплярами этого класса.
Прямые известные подклассы
Определено в пространстве имён
Классы: BottleManifest, Formula, Local, Partial, Patch
Краткое описание констант свернуть
- Owner =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
T.type_alias { T.any(Cask::Cask, ::Formula, Resource, SoftwareSpec, Homebrew::FormulaCreator) }
Краткое описание атрибутов экземпляра свернуть
- #checksum ⇒ Checksum? только для записи приватный
- #download_strategy ⇒ T::Class[AbstractDownloadStrategy] приватный
- #name ⇒ String? приватный
Имя формулы необходимо задать после DSL, поскольку до инициализации формулы у нас нет доступа к её имени.
- #owner ⇒ Owner? приватный
- #patches ⇒ Array<EmbeddedPatch, ExternalPatch> только для чтения приватный
- #source_modified_time ⇒ Time? только для чтения приватный
Атрибуты, включённые из Downloadable
Краткое описание методов экземпляра свернуть
- #apply_patches ⇒ void закрытый
- #download_queue_type ⇒ String закрытый
- #fetch(verify_download_integrity: true, timeout: nil, quiet: false, skip_patches: false) ⇒ Pathname закрытый
- #fetch_patches(skip_downloaded: false) ⇒ void закрытый
- #files(*files) ⇒ Partial закрытый
- #freeze ⇒ T.self_type закрытый
- #initialize(name = nil, &block) ⇒ void конструктор закрытый
- #initialize_dup(other) ⇒ void закрытый
- #livecheck(&block) ⇒ T.untyped закрытый
Livecheck можно использовать для проверки наличия новых версий программного обеспечения.
- #livecheck_defined? ⇒ Boolean закрытый
Определена ли спецификация livecheck.
- #mirror(val) ⇒ Array<String> закрытый
- #patch(strip = :p1, src = nil, &block) ⇒ Array<EmbeddedPatch, ExternalPatch> закрытый
- #prepare_patches ⇒ void закрытый
- #sha256(val) ⇒ Checksum закрытый
- #specs ⇒ Hash{Symbol => T.untyped} закрытый
- #stage(target = nil, debug_symbols: false, &block) ⇒ void
Проверяет целостность загруженного файла и распаковывает его.
- #unpack(target = nil, debug_symbols: false, &block) ⇒ void закрытый
Если указан целевой каталог, распаковывает туда; иначе распаковывает во временную папку.
- #url(val = nil, **specs) ⇒ String? закрытый
- #using ⇒ T::Class[AbstractDownloadStrategy], ... закрытый
- #version(val = nil) ⇒ Version? закрытый
Методы, включённые из 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
Методы, включённые из OnSystem::MacOSAndLinux
included, #on_arch_conditional, #on_macos, #on_system_conditional
Методы, включённые из Downloadable
#cached_download, #clear_cache, #download_queue_message, #download_queue_name, #downloaded!, #downloaded?, #downloaded_and_valid?, #downloader, #downloading!, #extracting!, #fetched_size, #total_size, #verified!, #verify_download_integrity, #verifying!
Методы, включённые из Context
current, current=, #debug?, #quiet?, #verbose?, #with_context
Подробное описание конструкторов
#initialize(name = nil, &block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
48 49 50 51 52 53 54 55 56 57 58 59 60 | # File 'resource.rb', line 48 def initialize(name = nil, &block) super() # Generally ensure this is synced with `initialize_dup` and `freeze` # (excluding simple objects like integers & booleans, weak refs like `owner` or permafrozen objects) @name = T.let(name, T.nilable(String)) @source_modified_time = T.let(nil, T.nilable(Time)) @patches = T.let([], T::Array[T.any(EmbeddedPatch, ExternalPatch)]) @owner = T.let(nil, T.nilable(Owner)) @livecheck = T.let(Livecheck.new(self), Livecheck) @livecheck_defined = T.let(false, T::Boolean) @insecure = T.let(false, T::Boolean) instance_eval(&block) if block end |
Подробное описание атрибутов экземпляра
#checksum=(value) ⇒ Checksum? (только для записи)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
32 33 34 | # File 'resource.rb', line 32 def checksum=(value) @checksum = value end |
#download_strategy ⇒ T::Class[AbstractDownloadStrategy]
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
35 36 37 | # File 'resource.rb', line 35 def download_strategy @download_strategy || super end |
#name ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Имя формулы необходимо задать после DSL, поскольку до инициализации формулы у нас нет доступа к её имени.
45 46 47 | # File 'resource.rb', line 45 def name @name end |
#owner ⇒ Owner?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
29 30 31 | # File 'resource.rb', line 29 def owner @owner end |
#patches ⇒ Array<EmbeddedPatch, ExternalPatch> (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
26 27 28 | # File 'resource.rb', line 26 def patches @patches end |
#source_modified_time ⇒ Time? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
23 24 25 | # File 'resource.rb', line 23 def source_modified_time @source_modified_time end |
Подробное описание методов экземпляра
#apply_patches ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
123 124 125 126 127 128 | # File 'resource.rb', line 123 def apply_patches return if patches.empty? ohai "Patching #{name}" patches.each(&:apply) end |
#download_queue_type ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
85 | # File 'resource.rb', line 85 def download_queue_type = "Resource" |
#fetch(verify_download_integrity: true, timeout: nil, quiet: false, skip_patches: false) ⇒ Pathname
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
174 175 176 177 178 | # File 'resource.rb', line 174 def fetch(verify_download_integrity: true, timeout: nil, quiet: false, skip_patches: false) fetch_patches unless skip_patches super(verify_download_integrity:, timeout:, quiet:) end |
#fetch_patches(skip_downloaded: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
116 117 118 119 120 | # File 'resource.rb', line 116 def fetch_patches(skip_downloaded: false) external_patches = patches.grep(ExternalPatch) external_patches.reject!(&:downloaded?) if skip_downloaded external_patches.each(&:fetch) end |
#files(*files) ⇒ Partial
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
161 162 163 | # File 'resource.rb', line 161 def files(*files) Partial.new(self, files) end |
#freeze ⇒ T.self_type
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
71 72 73 74 75 76 | # File 'resource.rb', line 71 def freeze @name.freeze @patches.freeze @livecheck.freeze super end |
#initialize_dup(other) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
63 64 65 66 67 68 | # File 'resource.rb', line 63 def initialize_dup(other) super @name = @name.dup @patches = @patches.dup @livecheck = @livecheck.dup end |
#livecheck(&block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Livecheck можно использовать для проверки наличия более новых версий программного обеспечения. Этот метод вычисляет DSL, указанный в блоке livecheck объекта Resource (если он существует), и соответствующим образом задаёт переменные экземпляра объекта Livecheck. Метод используется brew livecheck для проверки наличия более новых версий программного обеспечения.
Пример
livecheck do
url "https://example.com/foo/releases"
regex /foo-(\d+(?:\.\d+)+)\.tar/
end
195 196 197 198 199 200 | # File 'resource.rb', line 195 def livecheck(&block) return @livecheck unless block @livecheck_defined = true @livecheck.instance_eval(&block) end |
#livecheck_defined? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Определена ли спецификация livecheck.
Метод возвращает true, если в объекте Resource присутствует блок livecheck, и false в противном случае.
207 208 209 | # File 'resource.rb', line 207 def livecheck_defined? @livecheck_defined == true end |
#mirror(val) ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
245 246 247 | # File 'resource.rb', line 245 def mirror(val) mirrors << val end |
#patch(strip = :p1, src = nil, &block) ⇒ Array<EmbeddedPatch, ExternalPatch>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
256 257 258 259 | # File 'resource.rb', line 256 def patch(strip = :p1, src = nil, &block) p = ::Patch.create(strip, src, &block) patches << p end |
#prepare_patches ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
111 112 113 | # File 'resource.rb', line 111 def prepare_patches patches.grep(DATAPatch) { |p| p.path = T.cast(T.cast(T.must(owner), SoftwareSpec).owner, ::Formula).path } end |
#sha256(val) ⇒ Checksum
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
212 213 214 | # File 'resource.rb', line 212 def sha256(val) @checksum = Checksum.new(val) end |
#specs ⇒ Hash{Symbol => T.untyped}
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
267 268 269 | # File 'resource.rb', line 267 def specs @url&.specs || {}.freeze end |
#stage(target = nil, debug_symbols: false, &block) ⇒ void
Этот метод возвращает неопределённое значение.
Проверяет загрузку и распаковывает её. Блок может вызвать |resource, staging| staging.retain!, чтобы сохранить промежуточный каталог. Переопределяющие stage подклассы должны реализовать временный каталог с помощью Mktemp, чтобы это работало для всех подтипов.
100 101 102 103 104 105 106 107 108 | # File 'resource.rb', line 100 def stage(target = nil, debug_symbols: false, &block) raise ArgumentError, "Target directory or block is required" if !target && !block_given? prepare_patches fetch_patches(skip_downloaded: true) fetch unless downloaded? unpack(target, debug_symbols:, &block) end |
#unpack(target = nil, debug_symbols: false, &block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Если задана цель, распаковывает туда; в противном случае распаковывает во временную папку. Если задан блок, передаёт ему |stage|, где stage — это ResourceStageContext. Необходимо задать цель или блок, но не оба одновременно.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | # File 'resource.rb', line 141 def unpack(target = nil, debug_symbols: false, &block) current_working_directory = Pathname.pwd stage_resource(download_name, debug_symbols:) do |staging| downloader.stage do @source_modified_time = downloader.source_modified_time.freeze apply_patches if block yield(ResourceStageContext.new(self, staging)) elsif target target = Pathname(target) target = current_working_directory/target if target.relative? target.install Pathname.pwd.children end end end end |
#url(val = nil, **specs) ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
217 218 219 220 221 222 223 224 225 226 227 228 229 230 | # File 'resource.rb', line 217 def url(val = nil, **specs) return @url&.to_s if val.nil? specs = specs.dup # Don't allow this to be set. specs.delete(:insecure) specs[:insecure] = true if @insecure @url = URL.new(val, specs) @downloader = nil @download_strategy = @url.download_strategy @url.to_s end |
#using ⇒ T::Class[AbstractDownloadStrategy], ...
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
262 263 264 | # File 'resource.rb', line 262 def using @url&.using end |
#version(val = nil) ⇒ Version?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
233 234 235 236 237 238 239 240 241 242 | # File 'resource.rb', line 233 def version(val = nil) return super() if val.nil? @version = case val when String val.blank? ? Version::NULL : Version.new(val) when Version val end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Resource.html