Spec-Zone.ru › Homebrew

Модуль: 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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


129
130
131
# File 'unpack_strategy.rb', line 129

def merge_xattrs
  @merge_xattrs
end

#path ⇒ Pathname (только для чтения)

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

Возвращает:

  • (Pathname)


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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • path (Pathname)
  • prioritize_extension (Boolean) (по умолчанию: false)
  • type (Symbol, nil) (по умолчанию: nil)
  • ref_type (Symbol, nil) (по умолчанию: nil)
  • ref (String, nil) (по умолчанию: nil)
  • merge_xattrs (Boolean) (по умолчанию: false)

Возвращает:

  • (UnpackStrategy)


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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • extension (String)

Возвращает:

  • (UnpackStrategyType, nil)


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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • path (Pathname)

Возвращает:

  • (UnpackStrategyType, nil)


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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • type (Symbol)

Возвращает:

  • (UnpackStrategyType, nil)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Cask::Cask>, Array<Formula>)


197
198
199
# File 'unpack_strategy.rb', line 197

def dependencies
  []
end

#each_directory(pathname, &_block) ⇒ void

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

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

Вспомогательный метод для обхода деревьев каталогов.

Параметры:

  • pathname (Pathname)
  • _block (T.proc.params(path: Pathname).void)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

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

Параметры:

  • to (Pathname, nil) (по умолчанию: nil)
  • basename (String, Pathname, nil) (по умолчанию: nil)
  • verbose (Boolean) (по умолчанию: false)


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).expand_path
  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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

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

Параметры:

  • to (Pathname, nil) (по умолчанию: nil)
  • basename (String, Pathname, nil) (по умолчанию: nil)
  • verbose (Boolean) (по умолчанию: false)
  • prioritize_extension (Boolean) (по умолчанию: false)


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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • path (String, Pathname)
  • ref_type (Symbol, nil) (по умолчанию: nil)
  • ref (String, nil) (по умолчанию: nil)
  • merge_xattrs (Boolean) (по умолчанию: false)


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).expand_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

Spec-Zone.ru

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