diff options
Diffstat (limited to 'Library/Homebrew/cask/lib/hbc/artifact/pkg.rb')
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/artifact/pkg.rb | 61 | 
1 files changed, 28 insertions, 33 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb b/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb index be0a6be71..0967fd99d 100644 --- a/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb +++ b/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb @@ -1,4 +1,4 @@ -require "hbc/artifact/base" +require "hbc/artifact/abstract_artifact"  require "hbc/utils/hash_validator" @@ -6,62 +6,57 @@ require "vendor/plist/plist"  module Hbc    module Artifact -    class Pkg < Base +    class Pkg < AbstractArtifact        attr_reader :pkg_relative_path -      def self.artifact_dsl_key -        :pkg +      def self.from_args(cask, path, **options) +        options.extend(HashValidator).assert_valid_keys(:allow_untrusted, :choices) +        new(cask, path, **options)        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.extend(HashValidator).assert_valid_keys(:allow_untrusted, :choices) -          elsif @pkg_install_opts -            raise -          end -          raise if pkg_description.nil? -        rescue StandardError -          raise CaskInvalidError.new(@cask, "Bad pkg stanza") -        end +      attr_reader :path, :options + +      def initialize(cask, path, **options) +        super(cask) +        @path = cask.staged_path.join(path) +        @options = options        end -      def pkg_install_opts(opt) -        @pkg_install_opts[opt] if @pkg_install_opts.respond_to?(:keys) +      def summarize +        path.relative_path_from(cask.staged_path).to_s        end -      def install_phase -        @cask.artifacts[:pkg].each { |pkg_description| run_installer(pkg_description) } +      def install_phase(**options) +        run_installer(**options)        end -      def run_installer(pkg_description) -        load_pkg_description pkg_description -        ohai "Running installer for #{@cask}; your password may be necessary." +      private + +      def run_installer(command: nil, verbose: false, **options) +        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 CaskError, "pkg source file not found: '#{source}'" +        unless path.exist? +          raise CaskError, "pkg source file not found: '#{path.relative_path_from(cask.staged_path)}'"          end          args = [ -          "-pkg",    source, +          "-pkg",    path,            "-target", "/"          ] -        args << "-verboseR" if verbose? -        args << "-allowUntrusted" if pkg_install_opts :allow_untrusted +        args << "-verboseR" if verbose +        args << "-allowUntrusted" if options.fetch(:allow_untrusted, false)          with_choices_file do |choices_path|            args << "-applyChoiceChangesXML" << choices_path if choices_path -          @command.run!("/usr/sbin/installer", sudo: true, args: args, print_stdout: true) +          command.run!("/usr/sbin/installer", sudo: true, args: args, print_stdout: true)          end        end        def with_choices_file -        return yield nil unless pkg_install_opts(:choices) +        choices = options.fetch(:choices, {}) +        return yield nil if choices.empty?          Tempfile.open(["choices", ".xml"]) do |file|            begin -            file.write Plist::Emit.dump(pkg_install_opts(:choices)) +            file.write Plist::Emit.dump(choices)              file.close              yield file.path            ensure  | 
