| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  | module Hbc | 
					
						
							|  |  |  |   class CLI | 
					
						
							|  |  |  |     class Install < Base | 
					
						
							|  |  |  |       def self.run(*args) | 
					
						
							|  |  |  |         cask_tokens = cask_tokens_from(args) | 
					
						
							|  |  |  |         raise CaskUnspecifiedError if cask_tokens.empty? | 
					
						
							|  |  |  |         force = args.include? "--force" | 
					
						
							|  |  |  |         skip_cask_deps = args.include? "--skip-cask-deps" | 
					
						
							|  |  |  |         require_sha = args.include? "--require-sha" | 
					
						
							|  |  |  |         retval = install_casks cask_tokens, force, skip_cask_deps, require_sha | 
					
						
							|  |  |  |         # 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.install_casks(cask_tokens, force, skip_cask_deps, require_sha) | 
					
						
							|  |  |  |         count = 0
 | 
					
						
							|  |  |  |         cask_tokens.each do |cask_token| | 
					
						
							|  |  |  |           begin | 
					
						
							|  |  |  |             cask = Hbc.load(cask_token) | 
					
						
							|  |  |  |             Installer.new(cask, | 
					
						
							|  |  |  |                                force:          force, | 
					
						
							|  |  |  |                                skip_cask_deps: skip_cask_deps, | 
					
						
							|  |  |  |                                require_sha:    require_sha).install | 
					
						
							|  |  |  |             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 | 
					
						
							|  |  |  |             warn_unavailable_with_suggestion cask_token, e | 
					
						
							|  |  |  |           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 | 
					
						
							|  |  |  |         count.zero? ? nil : count == cask_tokens.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 |