Merge pull request #1535 from umireon/cask-pkg-choice
Cask: Add the choices option to pkg stanza
This commit is contained in:
		
						commit
						cc7541cbc4
					
				@ -2,6 +2,8 @@ require "hbc/artifact/base"
 | 
			
		||||
 | 
			
		||||
require "hbc/utils/hash_validator"
 | 
			
		||||
 | 
			
		||||
require "vendor/plist/plist"
 | 
			
		||||
 | 
			
		||||
module Hbc
 | 
			
		||||
  module Artifact
 | 
			
		||||
    class Pkg < Base
 | 
			
		||||
@ -16,7 +18,7 @@ module Hbc
 | 
			
		||||
        @pkg_install_opts = pkg_description.shift
 | 
			
		||||
        begin
 | 
			
		||||
          if @pkg_install_opts.respond_to?(:keys)
 | 
			
		||||
            @pkg_install_opts.extend(HashValidator).assert_valid_keys(:allow_untrusted)
 | 
			
		||||
            @pkg_install_opts.extend(HashValidator).assert_valid_keys(:allow_untrusted, :choices)
 | 
			
		||||
          elsif @pkg_install_opts
 | 
			
		||||
            raise
 | 
			
		||||
          end
 | 
			
		||||
@ -52,7 +54,24 @@ module Hbc
 | 
			
		||||
        ]
 | 
			
		||||
        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)
 | 
			
		||||
        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)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def with_choices_file
 | 
			
		||||
        return yield nil unless pkg_install_opts(:choices)
 | 
			
		||||
 | 
			
		||||
        Tempfile.open(["choices", ".xml"]) do |file|
 | 
			
		||||
          begin
 | 
			
		||||
            file.write Plist::Emit.dump(pkg_install_opts(:choices))
 | 
			
		||||
            file.close
 | 
			
		||||
            yield file.path
 | 
			
		||||
          ensure
 | 
			
		||||
            file.unlink
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -30,4 +30,45 @@ describe Hbc::Artifact::Pkg do
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "choices" do
 | 
			
		||||
    before do
 | 
			
		||||
      @cask = Hbc.load("with-choices")
 | 
			
		||||
      shutup do
 | 
			
		||||
        TestHelper.install_without_artifacts(@cask)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "passes the choice changes xml to the system installer" do
 | 
			
		||||
      pkg = Hbc::Artifact::Pkg.new(@cask, command: Hbc::FakeSystemCommand)
 | 
			
		||||
 | 
			
		||||
      file = mock
 | 
			
		||||
      file.expects(:write).with <<-EOS.undent
 | 
			
		||||
        <?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
        <plist version="1.0">
 | 
			
		||||
        <array>
 | 
			
		||||
        \t<dict>
 | 
			
		||||
        \t\t<key>attributeSetting</key>
 | 
			
		||||
        \t\t<integer>1</integer>
 | 
			
		||||
        \t\t<key>choiceAttribute</key>
 | 
			
		||||
        \t\t<string>selected</string>
 | 
			
		||||
        \t\t<key>choiceIdentifier</key>
 | 
			
		||||
        \t\t<string>choice1</string>
 | 
			
		||||
        \t</dict>
 | 
			
		||||
        </array>
 | 
			
		||||
        </plist>
 | 
			
		||||
      EOS
 | 
			
		||||
      file.stubs path: Pathname.new("/tmp/choices.xml")
 | 
			
		||||
      file.expects(:close)
 | 
			
		||||
      file.expects(:unlink)
 | 
			
		||||
      Tempfile.expects(:open).yields file
 | 
			
		||||
 | 
			
		||||
      Hbc::FakeSystemCommand.expects_command(["/usr/bin/sudo", "-E", "--", "/usr/sbin/installer", "-pkg", @cask.staged_path.join("MyFancyPkg", "Fancy.pkg"), "-target", "/", "-applyChoiceChangesXML", @cask.staged_path.join("/tmp/choices.xml")])
 | 
			
		||||
 | 
			
		||||
      shutup do
 | 
			
		||||
        pkg.install_phase
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								Library/Homebrew/cask/test/support/Casks/with-choices.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Library/Homebrew/cask/test/support/Casks/with-choices.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
test_cask 'with-choices' do
 | 
			
		||||
  version '1.2.3'
 | 
			
		||||
  sha256 '8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b'
 | 
			
		||||
 | 
			
		||||
  url "file://#{TEST_FIXTURE_DIR}/cask/MyFancyPkg.zip"
 | 
			
		||||
  homepage 'http://example.com/fancy-pkg'
 | 
			
		||||
 | 
			
		||||
  pkg 'MyFancyPkg/Fancy.pkg',
 | 
			
		||||
      choices: [
 | 
			
		||||
                 {
 | 
			
		||||
                   'choiceIdentifier' => 'choice1',
 | 
			
		||||
                   'choiceAttribute'  => 'selected',
 | 
			
		||||
                   'attributeSetting' => 1,
 | 
			
		||||
                 },
 | 
			
		||||
               ]
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user