Improve cask --adopt to only care about the installed version if auto_update is false

This commit is contained in:
Case Taintor 2024-09-26 11:14:30 +02:00
parent d1509cbef0
commit 31c560e578
3 changed files with 53 additions and 18 deletions

View File

@ -31,7 +31,7 @@ module Cask
private private
def move(adopt: false, force: false, verbose: false, predecessor: nil, reinstall: false, def move(adopt: false, auto_updates: false, force: false, verbose: false, predecessor: nil, reinstall: false,
command: nil, **options) command: nil, **options)
unless source.exist? unless source.exist?
raise CaskError, "It seems the #{self.class.english_name} source '#{source}' is not there." raise CaskError, "It seems the #{self.class.english_name} source '#{source}' is not there."
@ -79,6 +79,8 @@ module Cask
).success? ).success?
end end
same = true if auto_updates
unless same unless same
raise CaskError, raise CaskError,
"It seems the existing #{self.class.english_name} is different from " \ "It seems the existing #{self.class.english_name} is different from " \

View File

@ -253,7 +253,8 @@ on_request: true)
next if artifact.is_a?(Artifact::Binary) && !binaries? next if artifact.is_a?(Artifact::Binary) && !binaries?
artifact.install_phase( artifact.install_phase(
command: @command, verbose: verbose?, adopt: adopt?, force: force?, predecessor:, command: @command, verbose: verbose?, adopt: adopt?, auto_updates: @cask.auto_updates,
force: force?, predecessor:
) )
already_installed_artifacts.unshift(artifact) already_installed_artifacts.unshift(artifact)
end end

View File

@ -5,12 +5,13 @@ RSpec.describe Cask::Artifact::App, :cask do
let(:command) { NeverSudoSystemCommand } let(:command) { NeverSudoSystemCommand }
let(:adopt) { false } let(:adopt) { false }
let(:force) { false } let(:force) { false }
let(:auto_updates) { false }
let(:app) { cask.artifacts.find { |a| a.is_a?(described_class) } } let(:app) { cask.artifacts.find { |a| a.is_a?(described_class) } }
let(:source_path) { cask.staged_path.join("Caffeine.app") } let(:source_path) { cask.staged_path.join("Caffeine.app") }
let(:target_path) { cask.config.appdir.join("Caffeine.app") } let(:target_path) { cask.config.appdir.join("Caffeine.app") }
let(:install_phase) { app.install_phase(command:, adopt:, force:) } let(:install_phase) { app.install_phase(command:, adopt:, force:, auto_updates:) }
let(:uninstall_phase) { app.uninstall_phase(command:, force:) } let(:uninstall_phase) { app.uninstall_phase(command:, force:) }
before do before do
@ -83,7 +84,8 @@ RSpec.describe Cask::Artifact::App, :cask do
let(:adopt) { true } let(:adopt) { true }
describe "when the target compares different from the source" do describe "when the target compares different from the source" do
it "avoids clobbering the existing app" do describe "when the cask does not auto_updates" do
it "avoids clobbering the existing app if brew manages updates" do
stdout = <<~EOS stdout = <<~EOS
==> Adopting existing App at '#{target_path}' ==> Adopting existing App at '#{target_path}'
EOS EOS
@ -104,6 +106,36 @@ RSpec.describe Cask::Artifact::App, :cask do
end end
end end
describe "when the cask auto_updates" do
before do
target_path.delete
FileUtils.cp_r source_path, target_path
File.write(target_path.join("Contents/Info.plist"), "different")
end
let(:auto_updates) { true }
it "adopts the existing app" do
stdout = <<~EOS
==> Adopting existing App at '#{target_path}'
EOS
stderr = ""
expect { install_phase }
.to output(stdout).to_stdout
.and output(stderr).to_stderr
expect(source_path).to be_a_symlink
expect(target_path).to be_a_directory
contents_path = target_path.join("Contents/Info.plist")
expect(contents_path).to exist
expect(File.read(contents_path)).to eq("different")
end
end
end
describe "when the target compares the same as the source" do describe "when the target compares the same as the source" do
before do before do
target_path.delete target_path.delete