54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require "hbc/artifact/base" | ||
|  | 
 | ||
|  | class Hbc::Artifact::Pkg < Hbc::Artifact::Base | ||
|  |   attr_reader :pkg_relative_path | ||
|  | 
 | ||
|  |   def self.artifact_dsl_key | ||
|  |     :pkg | ||
|  |   end | ||
|  | 
 | ||
|  |   def load_pkg_description(pkg_description) | ||
|  |     @pkg_relative_path = pkg_description.shift | ||
|  |     @pkg_install_opts = pkg_description.shift | ||
|  |     begin | ||
|  |       if @pkg_install_opts.respond_to?(:keys) | ||
|  |         @pkg_install_opts.assert_valid_keys(:allow_untrusted) | ||
|  |       elsif @pkg_install_opts | ||
|  |         raise | ||
|  |       end | ||
|  |       raise if pkg_description.nil? | ||
|  |     rescue StandardError | ||
|  |       raise Hbc::CaskInvalidError.new(@cask, "Bad pkg stanza") | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def pkg_install_opts(opt) | ||
|  |     @pkg_install_opts[opt] if @pkg_install_opts.respond_to?(:keys) | ||
|  |   end | ||
|  | 
 | ||
|  |   def install_phase | ||
|  |     @cask.artifacts[:pkg].each { |pkg_description| run_installer(pkg_description) } | ||
|  |   end | ||
|  | 
 | ||
|  |   def uninstall_phase | ||
|  |     # Do nothing. Must be handled explicitly by a separate :uninstall stanza. | ||
|  |   end | ||
|  | 
 | ||
|  |   def run_installer(pkg_description) | ||
|  |     load_pkg_description pkg_description | ||
|  |     ohai "Running installer for #{@cask}; your password may be necessary." | ||
|  |     ohai "Package installers may write to any location; options such as --appdir are ignored." | ||
|  |     source = @cask.staged_path.join(pkg_relative_path) | ||
|  |     unless source.exist? | ||
|  |       raise Hbc::CaskError, "pkg source file not found: '#{source}'" | ||
|  |     end | ||
|  |     args = [ | ||
|  |              "-pkg",    source, | ||
|  |              "-target", "/" | ||
|  |            ] | ||
|  |     args << "-verboseR" if Hbc.verbose | ||
|  |     args << "-allowUntrusted" if pkg_install_opts :allow_untrusted | ||
|  |     @command.run!("/usr/sbin/installer", sudo: true, args: args, print_stdout: true) | ||
|  |   end | ||
|  | end |