Skip to content
Snippets Groups Projects
Commit f4a3bc10 authored by Kaito Udagawa's avatar Kaito Udagawa
Browse files

cask: add the choices option to pkg stanza

installer command accepts -applyChoiceChangesXML option to change
customize options on the GUI installer from the commandline.
(`man installer` for more detailed information)

The introduced option `choice` enables the choice changes to be supplied
via pkg stanza without tricks in preflight code.
parent 7853406f
No related branches found
No related tags found
No related merge requests found
......@@ -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,8 +54,21 @@ module Hbc
]
args << "-verboseR" if Hbc.verbose
args << "-allowUntrusted" if pkg_install_opts :allow_untrusted
if pkg_install_opts :choices
args << "-applyChoiceChangesXML"
args << choices_xml
end
@command.run!("/usr/sbin/installer", sudo: true, args: args, print_stdout: true)
end
def choices_xml
path = @cask.staged_path.join("Choices.xml")
unless File.exist? path
choices = pkg_install_opts :choices
IO.write path, Plist::Emit.dump(choices)
end
path
end
end
end
end
......@@ -30,4 +30,41 @@ 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)
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("Choices.xml")])
shutup do
pkg.install_phase
end
IO.read(@cask.staged_path.join("Choices.xml")).must_equal <<-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>
<dict>
<key>attributeSetting</key>
<integer>1</integer>
<key>choiceAttribute</key>
<string>selected</string>
<key>choiceIdentifier</key>
<string>choice1</string>
</dict>
</array>
</plist>
EOS
end
end
end
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment