| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-03 13:03:16 +01:00
										 |  |  | require "cask/config" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | module Cask | 
					
						
							| 
									
										
										
										
											2018-09-04 08:45:48 +01:00
										 |  |  |   class Cmd | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  |     class Upgrade < AbstractCommand | 
					
						
							|  |  |  |       option "--greedy", :greedy, false | 
					
						
							|  |  |  |       option "--quiet",  :quiet, false | 
					
						
							|  |  |  |       option "--force", :force, false | 
					
						
							|  |  |  |       option "--skip-cask-deps", :skip_cask_deps, false | 
					
						
							| 
									
										
										
										
											2019-07-26 22:55:37 -07:00
										 |  |  |       option "--dry-run", :dry_run, false | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |       def initialize(*) | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |         self.verbose = ($stdout.tty? || verbose?) && !quiet? | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def run | 
					
						
							| 
									
										
										
										
											2017-11-24 01:21:30 +00:00
										 |  |  |         outdated_casks = casks(alternative: lambda { | 
					
						
							| 
									
										
										
										
											2018-04-14 11:32:29 +02:00
										 |  |  |           Caskroom.casks.select do |cask| | 
					
						
							| 
									
										
										
										
											2017-11-24 01:21:30 +00:00
										 |  |  |             cask.outdated?(greedy?) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2018-06-09 11:19:04 +02:00
										 |  |  |         }).select do |cask| | 
					
						
							|  |  |  |           raise CaskNotInstalledError, cask unless cask.installed? || force? | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-09 11:19:04 +02:00
										 |  |  |           cask.outdated?(true) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-11-06 18:33:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-22 00:45:29 +00:00
										 |  |  |         if outdated_casks.empty? | 
					
						
							|  |  |  |           oh1 "No Casks to upgrade" | 
					
						
							|  |  |  |           return | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2018-09-03 22:08:14 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-03 21:44:07 -06:00
										 |  |  |         ohai "Casks with `auto_updates` or `version :latest` will not be upgraded" if args.empty? && !greedy? | 
					
						
							| 
									
										
										
										
											2019-07-28 14:50:59 +01:00
										 |  |  |         verb = dry_run? ? "Would upgrade" : "Upgrading" | 
					
						
							|  |  |  |         oh1 "#{verb} #{outdated_casks.count} #{"outdated package".pluralize(outdated_casks.count)}:" | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         caught_exceptions = [] | 
					
						
							| 
									
										
										
										
											2019-05-31 19:07:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         upgradable_casks = outdated_casks.map { |c| [CaskLoader.load(c.installed_caskfile), c] } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         puts upgradable_casks | 
					
						
							|  |  |  |           .map { |(old_cask, new_cask)| "#{new_cask.full_name} #{old_cask.version} -> #{new_cask.version}" } | 
					
						
							|  |  |  |           .join(", ") | 
					
						
							| 
									
										
										
										
											2019-07-28 14:50:59 +01:00
										 |  |  |         return if dry_run? | 
					
						
							| 
									
										
										
										
											2019-07-27 07:21:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         upgradable_casks.each do |(old_cask, new_cask)| | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |           upgrade_cask(old_cask, new_cask) | 
					
						
							| 
									
										
										
										
											2019-11-22 02:50:44 +01:00
										 |  |  |         rescue => e | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |           caught_exceptions << e | 
					
						
							|  |  |  |           next | 
					
						
							| 
									
										
										
										
											2018-09-09 00:34:33 -04:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2019-05-31 19:07:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         return if caught_exceptions.empty? | 
					
						
							|  |  |  |         raise MultipleCaskErrors, caught_exceptions if caught_exceptions.count > 1
 | 
					
						
							|  |  |  |         raise caught_exceptions.first if caught_exceptions.count == 1
 | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-31 19:07:53 +02:00
										 |  |  |       def upgrade_cask(old_cask, new_cask) | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         odebug "Started upgrade process for Cask #{old_cask}" | 
					
						
							|  |  |  |         old_config = old_cask.config | 
					
						
							| 
									
										
										
										
											2019-02-03 13:03:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         old_cask_installer = | 
					
						
							|  |  |  |           Installer.new(old_cask, binaries: binaries?, | 
					
						
							|  |  |  |                                   verbose:  verbose?, | 
					
						
							|  |  |  |                                   force:    force?, | 
					
						
							|  |  |  |                                   upgrade:  true) | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         new_cask.config = Config.global.merge(old_config) | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         new_cask_installer = | 
					
						
							|  |  |  |           Installer.new(new_cask, binaries:       binaries?, | 
					
						
							|  |  |  |                                   verbose:        verbose?, | 
					
						
							|  |  |  |                                   force:          force?, | 
					
						
							|  |  |  |                                   skip_cask_deps: skip_cask_deps?, | 
					
						
							|  |  |  |                                   require_sha:    require_sha?, | 
					
						
							|  |  |  |                                   upgrade:        true, | 
					
						
							|  |  |  |                                   quarantine:     quarantine?) | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         started_upgrade = false | 
					
						
							|  |  |  |         new_artifacts_installed = false | 
					
						
							| 
									
										
										
										
											2017-11-12 09:25:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |         begin | 
					
						
							| 
									
										
										
										
											2019-05-31 19:07:53 +02:00
										 |  |  |           oh1 "Upgrading #{Formatter.identifier(old_cask)}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           # Start new Cask's installation steps | 
					
						
							|  |  |  |           new_cask_installer.check_conflicts | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-31 19:07:53 +02:00
										 |  |  |           puts new_cask_installer.caveats if new_cask_installer.caveats | 
					
						
							| 
									
										
										
										
											2018-06-02 11:31:33 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           new_cask_installer.fetch | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           # Move the old Cask's artifacts back to staging | 
					
						
							|  |  |  |           old_cask_installer.start_upgrade | 
					
						
							|  |  |  |           # And flag it so in case of error | 
					
						
							|  |  |  |           started_upgrade = true | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           # Install the new Cask | 
					
						
							|  |  |  |           new_cask_installer.stage | 
					
						
							| 
									
										
										
										
											2017-11-28 13:00:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           new_cask_installer.install_artifacts | 
					
						
							|  |  |  |           new_artifacts_installed = true | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           # If successful, wipe the old Cask from staging | 
					
						
							|  |  |  |           old_cask_installer.finalize_upgrade | 
					
						
							| 
									
										
										
										
											2019-11-22 02:50:44 +01:00
										 |  |  |         rescue => e | 
					
						
							| 
									
										
										
										
											2019-04-03 19:17:12 -04:00
										 |  |  |           new_cask_installer.uninstall_artifacts if new_artifacts_installed | 
					
						
							|  |  |  |           new_cask_installer.purge_versioned_files | 
					
						
							|  |  |  |           old_cask_installer.revert_upgrade if started_upgrade | 
					
						
							|  |  |  |           raise e | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def self.help | 
					
						
							|  |  |  |         "upgrades all outdated casks" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |