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 |