Improve cask --adopt to only care about the installed version if auto_update is false
This commit is contained in:
		
							parent
							
								
									d1509cbef0
								
							
						
					
					
						commit
						31c560e578
					
				@ -31,7 +31,7 @@ module Cask
 | 
			
		||||
 | 
			
		||||
      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)
 | 
			
		||||
        unless source.exist?
 | 
			
		||||
          raise CaskError, "It seems the #{self.class.english_name} source '#{source}' is not there."
 | 
			
		||||
@ -79,6 +79,8 @@ module Cask
 | 
			
		||||
                ).success?
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              same = true if auto_updates
 | 
			
		||||
 | 
			
		||||
              unless same
 | 
			
		||||
                raise CaskError,
 | 
			
		||||
                      "It seems the existing #{self.class.english_name} is different from " \
 | 
			
		||||
 | 
			
		||||
@ -253,7 +253,8 @@ on_request: true)
 | 
			
		||||
        next if artifact.is_a?(Artifact::Binary) && !binaries?
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -5,12 +5,13 @@ RSpec.describe Cask::Artifact::App, :cask do
 | 
			
		||||
  let(:command) { NeverSudoSystemCommand }
 | 
			
		||||
  let(:adopt) { false }
 | 
			
		||||
  let(:force) { false }
 | 
			
		||||
  let(:auto_updates) { false }
 | 
			
		||||
  let(:app) { cask.artifacts.find { |a| a.is_a?(described_class) } }
 | 
			
		||||
 | 
			
		||||
  let(:source_path) { cask.staged_path.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:) }
 | 
			
		||||
 | 
			
		||||
  before do
 | 
			
		||||
@ -83,7 +84,8 @@ RSpec.describe Cask::Artifact::App, :cask do
 | 
			
		||||
        let(:adopt) { true }
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
                ==> Adopting existing App at '#{target_path}'
 | 
			
		||||
              EOS
 | 
			
		||||
@ -104,6 +106,36 @@ RSpec.describe Cask::Artifact::App, :cask do
 | 
			
		||||
            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
 | 
			
		||||
          before do
 | 
			
		||||
            target_path.delete
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user