| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       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? | 
					
						
							| 
									
										
										
										
											2018-09-17 20:11:11 +02:00
										 |  |  |         oh1 "Upgrading #{outdated_casks.count} #{"outdated package".pluralize(outdated_casks.count)}:" | 
					
						
							| 
									
										
										
										
											2018-09-09 13:37:42 -04:00
										 |  |  |         cask_upgrades = outdated_casks.map do |cask| | 
					
						
							|  |  |  |           if cask.installed_caskfile.nil? | 
					
						
							|  |  |  |             "#{cask.full_name} #{cask.version}" | 
					
						
							| 
									
										
										
										
											2018-09-09 00:34:33 -04:00
										 |  |  |           else | 
					
						
							| 
									
										
										
										
											2018-09-09 13:37:42 -04:00
										 |  |  |             "#{cask.full_name} #{CaskLoader.load(cask.installed_caskfile).version} -> #{cask.version}" | 
					
						
							| 
									
										
										
										
											2018-09-09 00:34:33 -04:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         puts cask_upgrades.join(", ") | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         outdated_casks.each do |old_cask| | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  |           odebug "Started upgrade process for Cask #{old_cask}" | 
					
						
							| 
									
										
										
										
											2017-11-16 10:40:32 -03:00
										 |  |  |           raise CaskUnavailableError.new(old_cask, "The Caskfile is missing!") if old_cask.installed_caskfile.nil? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           old_cask = CaskLoader.load(old_cask.installed_caskfile) | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-31 13:16:11 +00:00
										 |  |  |           old_cask_installer = | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |             Installer.new(old_cask, binaries: binaries?, | 
					
						
							|  |  |  |                                     verbose:  verbose?, | 
					
						
							|  |  |  |                                     force:    force?, | 
					
						
							|  |  |  |                                     upgrade:  true) | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  |           new_cask = CaskLoader.load(old_cask.to_s) | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  |           new_cask_installer = | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  |             Installer.new(new_cask, binaries:       binaries?, | 
					
						
							|  |  |  |                                     verbose:        verbose?, | 
					
						
							|  |  |  |                                     force:          force?, | 
					
						
							|  |  |  |                                     skip_cask_deps: skip_cask_deps?, | 
					
						
							|  |  |  |                                     require_sha:    require_sha?, | 
					
						
							| 
									
										
										
										
											2018-08-31 13:16:11 +00:00
										 |  |  |                                     upgrade:        true, | 
					
						
							|  |  |  |                                     quarantine:     quarantine?) | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-12 09:25:15 -03:00
										 |  |  |           started_upgrade = false | 
					
						
							|  |  |  |           new_artifacts_installed = false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  |           begin | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  |             # Start new Cask's installation steps | 
					
						
							|  |  |  |             new_cask_installer.check_conflicts | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-02 11:31:33 +10:00
										 |  |  |             new_cask_installer.print_caveats | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  |             new_cask_installer.fetch | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Move the old Cask's artifacts back to staging | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  |             old_cask_installer.start_upgrade | 
					
						
							| 
									
										
										
										
											2017-11-12 09:25:15 -03:00
										 |  |  |             # And flag it so in case of error | 
					
						
							|  |  |  |             started_upgrade = true | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  |             # Install the new Cask | 
					
						
							| 
									
										
										
										
											2017-11-28 13:00:08 +00:00
										 |  |  |             new_cask_installer.stage | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  |             new_cask_installer.install_artifacts | 
					
						
							| 
									
										
										
										
											2017-11-12 09:25:15 -03:00
										 |  |  |             new_artifacts_installed = true | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-11 17:21:13 -03:00
										 |  |  |             # If successful, wipe the old Cask from staging | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  |             old_cask_installer.finalize_upgrade | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  |           rescue CaskError => e | 
					
						
							| 
									
										
										
										
											2017-11-12 09:25:15 -03:00
										 |  |  |             new_cask_installer.uninstall_artifacts if new_artifacts_installed | 
					
						
							|  |  |  |             new_cask_installer.purge_versioned_files | 
					
						
							|  |  |  |             old_cask_installer.revert_upgrade if started_upgrade | 
					
						
							| 
									
										
										
										
											2017-11-16 10:40:32 -03:00
										 |  |  |             raise e | 
					
						
							| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def self.help | 
					
						
							|  |  |  |         "upgrades all outdated casks" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |