Merge pull request #2033 from reitermarkus/uninstall-first
Make sure `uninstall` is called before artifacts are removed.
This commit is contained in:
commit
93ef5092b0
@ -318,7 +318,13 @@ module Hbc
|
|||||||
def uninstall_artifacts
|
def uninstall_artifacts
|
||||||
odebug "Un-installing artifacts"
|
odebug "Un-installing artifacts"
|
||||||
artifacts = Artifact.for_cask(@cask, command: @command, force: force)
|
artifacts = Artifact.for_cask(@cask, command: @command, force: force)
|
||||||
|
|
||||||
|
# Make sure the `uninstall` stanza is run first, as it
|
||||||
|
# may depend on other artifacts still being installed.
|
||||||
|
artifacts = artifacts.sort_by { |a| a.is_a?(Artifact::Uninstall) ? -1 : 1 }
|
||||||
|
|
||||||
odebug "#{artifacts.length} artifact/s defined", artifacts
|
odebug "#{artifacts.length} artifact/s defined", artifacts
|
||||||
|
|
||||||
artifacts.each do |artifact|
|
artifacts.each do |artifact|
|
||||||
next unless artifact.respond_to?(:uninstall_phase)
|
next unless artifact.respond_to?(:uninstall_phase)
|
||||||
odebug "Un-installing artifact of class #{artifact.class}"
|
odebug "Un-installing artifact of class #{artifact.class}"
|
||||||
|
|||||||
@ -41,6 +41,25 @@ describe Hbc::CLI::Uninstall do
|
|||||||
expect(Hbc.appdir.join("Caffeine.app")).not_to exist
|
expect(Hbc.appdir.join("Caffeine.app")).not_to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "calls `uninstall` before removing artifacts" do
|
||||||
|
cask = Hbc::CaskLoader.load_from_file(TEST_FIXTURE_DIR/"cask/Casks/with-uninstall-script-app.rb")
|
||||||
|
|
||||||
|
shutup do
|
||||||
|
Hbc::Installer.new(cask).install
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(cask).to be_installed
|
||||||
|
|
||||||
|
expect {
|
||||||
|
shutup do
|
||||||
|
Hbc::CLI::Uninstall.run("with-uninstall-script-app")
|
||||||
|
end
|
||||||
|
}.not_to raise_error
|
||||||
|
|
||||||
|
expect(cask).not_to be_installed
|
||||||
|
expect(Hbc.appdir.join("MyFancyApp.app")).not_to exist
|
||||||
|
end
|
||||||
|
|
||||||
describe "when multiple versions of a cask are installed" do
|
describe "when multiple versions of a cask are installed" do
|
||||||
let(:token) { "versioned-cask" }
|
let(:token) { "versioned-cask" }
|
||||||
let(:first_installed_version) { "1.2.3" }
|
let(:first_installed_version) { "1.2.3" }
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
cask 'with-uninstall-script-app' do
|
||||||
|
version '1.2.3'
|
||||||
|
sha256 '5633c3a0f2e572cbf021507dec78c50998b398c343232bdfc7e26221d0a5db4d'
|
||||||
|
|
||||||
|
url "file://#{TEST_FIXTURE_DIR}/cask/MyFancyApp.zip"
|
||||||
|
homepage 'http://example.com/MyFancyApp'
|
||||||
|
|
||||||
|
app 'MyFancyApp/MyFancyApp.app'
|
||||||
|
|
||||||
|
postflight do
|
||||||
|
IO.write "#{appdir}/MyFancyApp.app/uninstall.sh", <<-EOS.undent
|
||||||
|
#!/bin/sh
|
||||||
|
/bin/rm -r "#{appdir}/MyFancyApp.app"
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
uninstall script: {
|
||||||
|
executable: "#{appdir}/MyFancyApp.app/uninstall.sh",
|
||||||
|
sudo: false
|
||||||
|
}
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user