Merge pull request #16889 from Homebrew/adopt_bundle_version
cask/artifact: check the bundle version when using `--adopt`.
This commit is contained in:
		
						commit
						f1ba840193
					
				@ -52,12 +52,34 @@ module Cask
 | 
			
		||||
          else
 | 
			
		||||
            if adopt
 | 
			
		||||
              ohai "Adopting existing #{self.class.english_name} at '#{target}'"
 | 
			
		||||
              same = command.run(
 | 
			
		||||
                "/usr/bin/diff",
 | 
			
		||||
                args:         ["--recursive", "--brief", source, target],
 | 
			
		||||
                verbose:,
 | 
			
		||||
                print_stdout: verbose,
 | 
			
		||||
              ).success?
 | 
			
		||||
 | 
			
		||||
              source_plist = Pathname("#{source}/Contents/Info.plist")
 | 
			
		||||
              target_plist = Pathname("#{target}/Contents/Info.plist")
 | 
			
		||||
              same = if source_plist.size? &&
 | 
			
		||||
                        (source_bundle_version = Homebrew::BundleVersion.from_info_plist(source_plist)) &&
 | 
			
		||||
                        target_plist.size? &&
 | 
			
		||||
                        (target_bundle_version = Homebrew::BundleVersion.from_info_plist(target_plist))
 | 
			
		||||
                if source_bundle_version.short_version == target_bundle_version.short_version
 | 
			
		||||
                  if source_bundle_version.version == target_bundle_version.version
 | 
			
		||||
                    true
 | 
			
		||||
                  else
 | 
			
		||||
                    onoe "The bundle version of #{source} is #{source_bundle_version.version} but " \
 | 
			
		||||
                         "is #{target_bundle_version.version} for #{target}!"
 | 
			
		||||
                    false
 | 
			
		||||
                  end
 | 
			
		||||
                else
 | 
			
		||||
                  onoe "The bundle short version of #{source} is #{source_bundle_version.short_version} but " \
 | 
			
		||||
                       "is #{target_bundle_version.short_version} for #{target}!"
 | 
			
		||||
                  false
 | 
			
		||||
                end
 | 
			
		||||
              else
 | 
			
		||||
                command.run(
 | 
			
		||||
                  "/usr/bin/diff",
 | 
			
		||||
                  args:         ["--recursive", "--brief", source, target],
 | 
			
		||||
                  verbose:,
 | 
			
		||||
                  print_stdout: verbose,
 | 
			
		||||
                ).success?
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              unless same
 | 
			
		||||
                raise CaskError,
 | 
			
		||||
@ -73,7 +95,7 @@ module Cask
 | 
			
		||||
 | 
			
		||||
            message = "It seems there is already #{self.class.english_article} " \
 | 
			
		||||
                      "#{self.class.english_name} at '#{target}'"
 | 
			
		||||
            raise CaskError, "#{message}." unless force
 | 
			
		||||
            raise CaskError, "#{message}." if !force && !adopt
 | 
			
		||||
 | 
			
		||||
            opoo "#{message}; overwriting."
 | 
			
		||||
            delete(target, force:, command:, **options)
 | 
			
		||||
@ -120,13 +142,13 @@ module Cask
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def move_back(skip: false, force: false, command: nil, **options)
 | 
			
		||||
      def move_back(skip: false, force: false, adopt: false, command: nil, **options)
 | 
			
		||||
        FileUtils.rm source if source.symlink? && source.dirname.join(source.readlink) == target
 | 
			
		||||
 | 
			
		||||
        if Utils.path_occupied?(source)
 | 
			
		||||
          message = "It seems there is already #{self.class.english_article} " \
 | 
			
		||||
                    "#{self.class.english_name} at '#{source}'"
 | 
			
		||||
          raise CaskError, "#{message}." unless force
 | 
			
		||||
          raise CaskError, "#{message}." if !force && !adopt
 | 
			
		||||
 | 
			
		||||
          opoo "#{message}; overwriting."
 | 
			
		||||
          delete(source, force:, command:, **options)
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ module Cask
 | 
			
		||||
 | 
			
		||||
      private
 | 
			
		||||
 | 
			
		||||
      def link(force: false, command: nil, **_options)
 | 
			
		||||
      def link(force: false, adopt: false, command: nil, **_options)
 | 
			
		||||
        unless source.exist?
 | 
			
		||||
          raise CaskError,
 | 
			
		||||
                "It seems the #{self.class.link_type_english_name.downcase} " \
 | 
			
		||||
@ -54,7 +54,7 @@ module Cask
 | 
			
		||||
          message = "It seems there is already #{self.class.english_article} " \
 | 
			
		||||
                    "#{self.class.english_name} at '#{target}'"
 | 
			
		||||
 | 
			
		||||
          if force && target.symlink? &&
 | 
			
		||||
          if (force || adopt) && target.symlink? &&
 | 
			
		||||
             (target.realpath == source.realpath || target.realpath.to_s.start_with?("#{cask.caskroom_path}/"))
 | 
			
		||||
            opoo "#{message}; overwriting."
 | 
			
		||||
            Utils.gain_permissions_remove(target, command:)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user