Модуль: UnpackStrategy Приватный
- Расширен модулем:
- T::Helpers, Utils::Output::Mixin
- Подключает:
- SystemCommand::Mixin, Utils::Output::Mixin
- Подключён в:
- Air, Bzip2, Cab, Directory, Dmg, Fossil, GenericUnar, Gzip, Lha, Lzip, Lzma, P7Zip, Pax, Rar, Tar, Uncompressed, Xar, Xz, Zip, Zstd
- Определён в:
- unpack_strategy.rb,
extend/os/mac/unpack_strategy/zip.rb,
unpack_strategy/xz.rb,
unpack_strategy/air.rb,
unpack_strategy/cab.rb,
unpack_strategy/cvs.rb,
unpack_strategy/dmg.rb,
unpack_strategy/git.rb,
unpack_strategy/jar.rb,
unpack_strategy/lha.rb,
unpack_strategy/otf.rb,
unpack_strategy/pax.rb,
unpack_strategy/pkg.rb,
unpack_strategy/rar.rb,
unpack_strategy/sit.rb,
unpack_strategy/tar.rb,
unpack_strategy/ttf.rb,
unpack_strategy/xar.rb,
unpack_strategy/zip.rb,
unpack_strategy/gzip.rb,
unpack_strategy/lzip.rb,
unpack_strategy/lzma.rb,
unpack_strategy/zstd.rb,
unpack_strategy/bzip2.rb,
unpack_strategy/p7zip.rb,
unpack_strategy/bazaar.rb,
unpack_strategy/fossil.rb,
unpack_strategy/compress.rb,
unpack_strategy/lua_rock.rb,
unpack_strategy/directory.rb,
unpack_strategy/mercurial.rb,
unpack_strategy/executable.rb,
unpack_strategy/subversion.rb,
unpack_strategy/generic_unar.rb,
unpack_strategy/uncompressed.rb,
unpack_strategy/microsoft_office_xml.rb,
unpack_strategy/self_extracting_executable.rb
Этот модуль является частью приватного API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности третьим сторонам следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Определено в пространстве имён
Модули: ClassMethods Классы: Air, Bazaar, Bzip2, Cab, Compress, Cvs, Directory, Dmg, Executable, Fossil, GenericUnar, Git, Gzip, Jar, Lha, LuaRock, Lzip, Lzma, Mercurial, MicrosoftOfficeXml, Otf, P7Zip, Pax, Pkg, Rar, SelfExtractingExecutable, Sit, Subversion, Tar, Ttf, Uncompressed, Xar, Xz, Zip, Zstd
Краткое описание констант свернуть
- UnpackStrategyType =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
T.type_alias { T.all(T::Class[UnpackStrategy], UnpackStrategy::ClassMethods) }
Краткое описание атрибутов экземпляра свернуть
- #merge_xattrs ⇒ Boolean только для чтения приватный
- #path ⇒ Pathname только для чтения приватный
Краткое описание методов класса свернуть
- .detect(path, prioritize_extension: false, type: nil, ref_type: nil, ref: nil, merge_xattrs: false) ⇒ UnpackStrategy приватный
- .from_extension(extension) ⇒ UnpackStrategyType? приватный
- .from_magic(path) ⇒ UnpackStrategyType? приватный
- .from_type(type) ⇒ UnpackStrategyType? приватный
Краткое описание методов экземпляра свернуть
- #dependencies ⇒ Array<Cask::Cask>, Array<Formula> закрытый
- #each_directory(pathname, &_block) ⇒ void закрытый
Вспомогательный метод для обхода деревьев каталогов.
- #extract(to: nil, basename: nil, verbose: false) ⇒ void закрытый
- #extract_nestedly(to: nil, basename: nil, verbose: false, prioritize_extension: false) ⇒ void закрытый
- #initialize(path, ref_type: nil, ref: nil, merge_xattrs: false) ⇒ void закрытый
Методы, включённые из 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
Методы, включённые из SystemCommand::Mixin
#system_command, #system_command!
Подробное описание атрибутов экземпляра
#merge_xattrs ⇒ Boolean (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
129 130 131 | # File 'unpack_strategy.rb', line 129 def merge_xattrs @merge_xattrs end |
#path ⇒ Pathname (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
126 127 128 | # File 'unpack_strategy.rb', line 126 def path @path end |
Подробное описание методов класса
.detect(path, prioritize_extension: false, type: nil, ref_type: nil, ref: nil, merge_xattrs: false) ⇒ UnpackStrategy
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | # File 'unpack_strategy.rb', line 108 def self.detect(path, prioritize_extension: false, type: nil, ref_type: nil, ref: nil, merge_xattrs: false) strategy = from_type(type) if type if prioritize_extension && path.extname.present? strategy ||= from_extension(path.extname) strategy ||= strategies.find { |s| (s < Directory || s == Fossil) && s.can_extract?(path) } else strategy ||= from_magic(path) strategy ||= from_extension(path.extname) end strategy ||= Uncompressed strategy.new(path, ref_type:, ref:, merge_xattrs:) end |
.from_extension(extension) ⇒ UnpackStrategyType?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
94 95 96 97 | # File 'unpack_strategy.rb', line 94 def self.from_extension(extension) strategies.sort_by { |s| -(s.extensions.map(&:length).max || 0) } .find { |s| extension.end_with?(*s.extensions) } end |
.from_magic(path) ⇒ UnpackStrategyType?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
100 101 102 | # File 'unpack_strategy.rb', line 100 def self.from_magic(path) strategies.find { |s| s.can_extract?(path) } end |
.from_type(type) ⇒ UnpackStrategyType?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | # File 'unpack_strategy.rb', line 76 def self.from_type(type) type = { naked: :uncompressed, nounzip: :uncompressed, seven_zip: :p7zip, }.fetch(type, type) begin # The strategy class name is derived dynamically from the type. # rubocop:disable Sorbet/ConstantsFromStrings const_get(type.to_s.split("_").map(&:capitalize).join.gsub(/\d+[a-z]/, &:upcase)) # rubocop:enable Sorbet/ConstantsFromStrings rescue NameError nil end end |
Подробное описание методов экземпляра
#dependencies ⇒ Array<Cask::Cask>, Array<Formula>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
197 198 199 | # File 'unpack_strategy.rb', line 197 def dependencies [] end |
#each_directory(pathname, &_block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Вспомогательный метод для обхода деревьев каталогов.
208 209 210 211 212 | # File 'unpack_strategy.rb', line 208 def each_directory(pathname, &_block) pathname.find do |path| yield path if path.directory? end end |
#extract(to: nil, basename: nil, verbose: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
151 152 153 154 155 156 | # File 'unpack_strategy.rb', line 151 def extract(to: nil, basename: nil, verbose: false) basename ||= path.basename unpack_dir = Pathname(to || Dir.pwd). unpack_dir.mkpath extract_to_dir(unpack_dir, basename: Pathname(basename), verbose:) end |
#extract_nestedly(to: nil, basename: nil, verbose: false, prioritize_extension: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | # File 'unpack_strategy.rb', line 166 def extract_nestedly(to: nil, basename: nil, verbose: false, prioritize_extension: false) Mktemp.new("homebrew-unpack").run(chdir: false) do |unpack_dir| tmp_unpack_dir = T.must(unpack_dir.tmpdir) extract(to: tmp_unpack_dir, basename:, verbose:) children = tmp_unpack_dir.children if children.size == 1 && !children.fetch(0).directory? first_child = children.first next if first_child.nil? s = UnpackStrategy.detect(first_child, prioritize_extension:) s.extract_nestedly(to:, verbose:, prioritize_extension:) next end # Ensure all extracted directories are writable. each_directory(tmp_unpack_dir) do |path| next if path.writable? FileUtils.chmod "u+w", path, verbose: end Directory.new(tmp_unpack_dir, move: true).extract(to:, verbose:) end end |
#initialize(path, ref_type: nil, ref: nil, merge_xattrs: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
135 136 137 138 139 140 | # File 'unpack_strategy.rb', line 135 def initialize(path, ref_type: nil, ref: nil, merge_xattrs: false) @path = T.let(Pathname(path)., Pathname) @ref_type = ref_type @ref = ref @merge_xattrs = merge_xattrs end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/UnpackStrategy.html