diff --git a/Casks/suspicious-package.rb b/Casks/suspicious-package.rb index 16a90bb2d5c..7cf34be16fa 100644 --- a/Casks/suspicious-package.rb +++ b/Casks/suspicious-package.rb @@ -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 diff --git a/lib/hbc/container.rb b/lib/hbc/container.rb index dc5b94bcf5b..e2b21a3ef01 100644 --- a/lib/hbc/container.rb +++ b/lib/hbc/container.rb @@ -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 diff --git a/lib/hbc/container/xip.rb b/lib/hbc/container/xip.rb new file mode 100644 index 00000000000..579f28fe0d3 --- /dev/null +++ b/lib/hbc/container/xip.rb @@ -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