| 
									
										
										
										
											2017-10-29 17:31:07 -03:00
										 |  |  | module Hbc | 
					
						
							|  |  |  |   class CLI | 
					
						
							|  |  |  |     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 { | 
					
						
							|  |  |  |           Hbc.installed.select do |cask| | 
					
						
							|  |  |  |             cask.outdated?(greedy?) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         }).select { |cask| cask.outdated?(true) } | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2017-11-06 18:33:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         oh1 "Upgrading #{Formatter.pluralize(outdated_casks.length, "outdated package")}, with result:" | 
					
						
							|  |  |  |         puts outdated_casks.map { |f| "#{f.full_name} #{f.version}" } * ", " | 
					
						
							| 
									
										
										
										
											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-10-29 17:31:07 -03:00
										 |  |  |           raise CaskNotInstalledError, old_cask unless old_cask.installed? || force? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  |           old_cask_installer = Installer.new(old_cask, binaries: binaries?, verbose: verbose?, force: force?, upgrade: true) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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?, | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -03:00
										 |  |  |                                     upgrade: true) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             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
										 |  |  |             new_cask_installer.enable_accessibility_access | 
					
						
							| 
									
										
										
										
											2017-10-30 23:29:00 -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 |