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.
This commit is contained in:
parent
7853406fb4
commit
f4a3bc100b
@ -2,6 +2,8 @@ require "hbc/artifact/base"
|
|||||||
|
|
||||||
require "hbc/utils/hash_validator"
|
require "hbc/utils/hash_validator"
|
||||||
|
|
||||||
|
require "vendor/plist/plist"
|
||||||
|
|
||||||
module Hbc
|
module Hbc
|
||||||
module Artifact
|
module Artifact
|
||||||
class Pkg < Base
|
class Pkg < Base
|
||||||
@ -16,7 +18,7 @@ module Hbc
|
|||||||
@pkg_install_opts = pkg_description.shift
|
@pkg_install_opts = pkg_description.shift
|
||||||
begin
|
begin
|
||||||
if @pkg_install_opts.respond_to?(:keys)
|
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
|
elsif @pkg_install_opts
|
||||||
raise
|
raise
|
||||||
end
|
end
|
||||||
@ -52,8 +54,21 @@ module Hbc
|
|||||||
]
|
]
|
||||||
args << "-verboseR" if Hbc.verbose
|
args << "-verboseR" if Hbc.verbose
|
||||||
args << "-allowUntrusted" if pkg_install_opts :allow_untrusted
|
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)
|
@command.run!("/usr/sbin/installer", sudo: true, args: args, print_stdout: true)
|
||||||
end
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -30,4 +30,41 @@ describe Hbc::Artifact::Pkg do
|
|||||||
end
|
end
|
||||||
end
|
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
|
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