mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
69 lines
2.0 KiB
Ruby
69 lines
2.0 KiB
Ruby
![]() |
class Hbc::Container; end
|
||
|
|
||
|
require "hbc/container/base"
|
||
|
require "hbc/container/air"
|
||
|
require "hbc/container/bzip2"
|
||
|
require "hbc/container/cab"
|
||
|
require "hbc/container/criteria"
|
||
|
require "hbc/container/dmg"
|
||
|
require "hbc/container/generic_unar"
|
||
|
require "hbc/container/gzip"
|
||
|
require "hbc/container/lzma"
|
||
|
require "hbc/container/naked"
|
||
|
require "hbc/container/otf"
|
||
|
require "hbc/container/pkg"
|
||
|
require "hbc/container/seven_zip"
|
||
|
require "hbc/container/sit"
|
||
|
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"
|
||
|
|
||
|
class Hbc::Container
|
||
|
def self.autodetect_containers
|
||
|
[
|
||
|
Hbc::Container::Pkg,
|
||
|
Hbc::Container::Ttf,
|
||
|
Hbc::Container::Otf,
|
||
|
Hbc::Container::Air,
|
||
|
Hbc::Container::Cab,
|
||
|
Hbc::Container::Dmg,
|
||
|
Hbc::Container::SevenZip,
|
||
|
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
|
||
|
]
|
||
|
# for explicit use only (never autodetected):
|
||
|
# Hbc::Container::Naked
|
||
|
# Hbc::Container::GenericUnar
|
||
|
end
|
||
|
|
||
|
def self.for_path(path, command)
|
||
|
odebug "Determining which containers to use based on filetype"
|
||
|
criteria = Hbc::Container::Criteria.new(path, command)
|
||
|
autodetect_containers.find do |c|
|
||
|
odebug "Checking container class #{c}"
|
||
|
c.me?(criteria)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def self.from_type(type)
|
||
|
odebug "Determining which containers to use based on 'container :type'"
|
||
|
begin
|
||
|
Hbc::Container.const_get(type.to_s.split("_").map(&:capitalize).join)
|
||
|
rescue NameError
|
||
|
false
|
||
|
end
|
||
|
end
|
||
|
end
|