| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  | module Hbc | 
					
						
							|  |  |  |   class CLI | 
					
						
							| 
									
										
										
										
											2017-05-20 19:08:03 +02:00
										 |  |  |     class Install < AbstractCommand | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |       option "--force",          :force,          false | 
					
						
							|  |  |  |       option "--skip-cask-deps", :skip_cask_deps, false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def initialize(*) | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |         raise CaskUnspecifiedError if args.empty? | 
					
						
							| 
									
										
										
										
											2017-05-20 02:27:13 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def run | 
					
						
							|  |  |  |         retval = install_casks | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         # retval is ternary: true/false/nil | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         raise CaskError, "nothing to install" if retval.nil? | 
					
						
							|  |  |  |         raise CaskError, "install incomplete" unless retval | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 02:27:13 +02:00
										 |  |  |       def install_casks | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         count = 0
 | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         args.each do |cask_token| | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           begin | 
					
						
							| 
									
										
										
										
											2017-03-13 01:09:36 +01:00
										 |  |  |             cask = CaskLoader.load(cask_token) | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |             Installer.new(cask, binaries:       binaries?, | 
					
						
							| 
									
										
										
										
											2017-05-29 18:24:52 +01:00
										 |  |  |                                 verbose: verbose?, | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |                                 force:          force?, | 
					
						
							|  |  |  |                                 skip_cask_deps: skip_cask_deps?, | 
					
						
							|  |  |  |                                 require_sha:    require_sha?).install | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |             count += 1
 | 
					
						
							|  |  |  |           rescue CaskAlreadyInstalledError => e | 
					
						
							|  |  |  |             opoo e.message | 
					
						
							|  |  |  |             count += 1
 | 
					
						
							| 
									
										
										
										
											2016-10-01 23:18:13 +02:00
										 |  |  |           rescue CaskAlreadyInstalledAutoUpdatesError => e | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |             opoo e.message | 
					
						
							|  |  |  |             count += 1
 | 
					
						
							|  |  |  |           rescue CaskUnavailableError => e | 
					
						
							| 
									
										
										
										
											2017-05-20 02:27:13 +02:00
										 |  |  |             self.class.warn_unavailable_with_suggestion cask_token, e | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           rescue CaskNoShasumError => e | 
					
						
							|  |  |  |             opoo e.message | 
					
						
							|  |  |  |             count += 1
 | 
					
						
							| 
									
										
										
										
											2016-11-28 13:38:49 +01:00
										 |  |  |           rescue CaskError => e | 
					
						
							|  |  |  |             onoe e.message | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-05-20 02:27:13 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         count.zero? ? nil : count == args.length | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.warn_unavailable_with_suggestion(cask_token, e) | 
					
						
							|  |  |  |         exact_match, partial_matches = Search.search(cask_token) | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |         error_message = e.message | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         if exact_match | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |           error_message.concat(". Did you mean:\n#{exact_match}") | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         elsif !partial_matches.empty? | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |           error_message.concat(". Did you mean one of:\n") | 
					
						
							|  |  |  |                        .concat(Formatter.columns(partial_matches.take(20))) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |         onoe error_message | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.help | 
					
						
							|  |  |  |         "installs the given Cask" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.needs_init? | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |