Add support for XIP archives. (#23343)
This commit is contained in:
parent
cb95a2dbdf
commit
93cc9f6852
|
@ -7,8 +7,5 @@ cask 'suspicious-package' do
|
|||
homepage 'http://www.mothersruin.com/software/SuspiciousPackage/'
|
||||
license :gratis
|
||||
|
||||
depends_on formula: 'unar'
|
||||
container type: :generic_unar
|
||||
|
||||
app 'Suspicious Package.app'
|
||||
end
|
||||
|
|
|
@ -18,6 +18,7 @@ require "hbc/container/tar"
|
|||
require "hbc/container/ttf"
|
||||
require "hbc/container/rar"
|
||||
require "hbc/container/xar"
|
||||
require "hbc/container/xip"
|
||||
require "hbc/container/xz"
|
||||
require "hbc/container/zip"
|
||||
|
||||
|
@ -34,12 +35,13 @@ class Hbc::Container
|
|||
Hbc::Container::Sit,
|
||||
Hbc::Container::Rar,
|
||||
Hbc::Container::Zip,
|
||||
Hbc::Container::Xip, # needs to be before xar as this is a cpio inside a gzip inside a xar
|
||||
Hbc::Container::Xar, # need to be before tar as tar can also list xar
|
||||
Hbc::Container::Tar, # or compressed tar (bzip2/gzip/lzma/xz)
|
||||
Hbc::Container::Bzip2, # pure bzip2
|
||||
Hbc::Container::Gzip, # pure gzip
|
||||
Hbc::Container::Lzma, # pure lzma
|
||||
Hbc::Container::Xz, # pure xz
|
||||
Hbc::Container::Xar,
|
||||
]
|
||||
# for explicit use only (never autodetected):
|
||||
# Hbc::Container::Naked
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
require "tmpdir"
|
||||
|
||||
class Hbc::Container::Xip < Hbc::Container::Base
|
||||
def self.me?(criteria)
|
||||
criteria.magic_number(%r{^xar!}n) &&
|
||||
IO.popen(["/usr/bin/xar", "-t", "-f", criteria.path.to_s], err: "/dev/null") { |io| io.read =~ %r{\AContent\nMetadata\n\Z} }
|
||||
end
|
||||
|
||||
def extract
|
||||
Dir.mktmpdir do |unpack_dir|
|
||||
begin
|
||||
ohai "Verifying signature for #{@path.basename}"
|
||||
@command.run!("/usr/sbin/pkgutil", args: ["--check-signature", @path])
|
||||
rescue
|
||||
raise "Signature check failed."
|
||||
end
|
||||
|
||||
@command.run!("/usr/bin/xar", args: ["-x", "-f", @path, "Content", "-C", unpack_dir])
|
||||
|
||||
Dir.chdir(@cask.staged_path) do
|
||||
@command.run!("/usr/bin/cpio", args: ["--quiet", "-i", "-I", Pathname(unpack_dir).join("Content")])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue