| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | # typed: true # rubocop:todo Sorbet/StrictSigil | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-24 21:55:47 +08:00
										 |  |  | require "bundle/dsl" | 
					
						
							|  |  |  | require "bundle/brew_installer" | 
					
						
							|  |  |  | require "bundle/cask_installer" | 
					
						
							|  |  |  | require "bundle/mac_app_store_installer" | 
					
						
							|  |  |  | require "bundle/whalebrew_installer" | 
					
						
							|  |  |  | require "bundle/vscode_extension_installer" | 
					
						
							|  |  |  | require "bundle/tap_installer" | 
					
						
							| 
									
										
										
										
											2025-03-24 16:45:22 +00:00
										 |  |  | require "bundle/skipper" | 
					
						
							| 
									
										
										
										
											2025-03-24 21:55:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | module Homebrew | 
					
						
							|  |  |  |   module Bundle | 
					
						
							|  |  |  |     module Installer | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.install(entries, global: false, file: nil, no_lock: false, no_upgrade: false, verbose: false, | 
					
						
							|  |  |  |                        force: false, quiet: false) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         success = 0
 | 
					
						
							|  |  |  |         failure = 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         entries.each do |entry| | 
					
						
							|  |  |  |           name = entry.name | 
					
						
							|  |  |  |           args = [name] | 
					
						
							|  |  |  |           options = {} | 
					
						
							|  |  |  |           verb = "Installing" | 
					
						
							|  |  |  |           type = entry.type | 
					
						
							|  |  |  |           cls = case type | 
					
						
							|  |  |  |           when :brew | 
					
						
							|  |  |  |             options = entry.options | 
					
						
							|  |  |  |             verb = "Upgrading" if Homebrew::Bundle::BrewInstaller.formula_upgradable?(name) | 
					
						
							|  |  |  |             Homebrew::Bundle::BrewInstaller | 
					
						
							|  |  |  |           when :cask | 
					
						
							|  |  |  |             options = entry.options | 
					
						
							|  |  |  |             verb = "Upgrading" if Homebrew::Bundle::CaskInstaller.cask_upgradable?(name) | 
					
						
							|  |  |  |             Homebrew::Bundle::CaskInstaller | 
					
						
							|  |  |  |           when :mas | 
					
						
							|  |  |  |             args << entry.options[:id] | 
					
						
							|  |  |  |             Homebrew::Bundle::MacAppStoreInstaller | 
					
						
							|  |  |  |           when :whalebrew | 
					
						
							|  |  |  |             Homebrew::Bundle::WhalebrewInstaller | 
					
						
							|  |  |  |           when :vscode | 
					
						
							|  |  |  |             Homebrew::Bundle::VscodeExtensionInstaller | 
					
						
							|  |  |  |           when :tap | 
					
						
							|  |  |  |             verb = "Tapping" | 
					
						
							|  |  |  |             options = entry.options | 
					
						
							|  |  |  |             Homebrew::Bundle::TapInstaller | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           next if cls.nil? | 
					
						
							|  |  |  |           next if Homebrew::Bundle::Skipper.skip? entry | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           preinstall = if cls.preinstall(*args, **options, no_upgrade:, verbose:) | 
					
						
							|  |  |  |             puts Formatter.success("#{verb} #{name}") | 
					
						
							|  |  |  |             true | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             puts "Using #{name}" unless quiet | 
					
						
							|  |  |  |             false | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           if cls.install(*args, **options, | 
					
						
							|  |  |  |                          preinstall:, no_upgrade:, verbose:, force:) | 
					
						
							|  |  |  |             success += 1
 | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             $stderr.puts Formatter.error("#{verb} #{name} has failed!") | 
					
						
							|  |  |  |             failure += 1
 | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         unless failure.zero? | 
					
						
							|  |  |  |           dependency = Homebrew::Bundle::Dsl.pluralize_dependency(failure) | 
					
						
							| 
									
										
										
										
											2025-03-19 09:51:39 +00:00
										 |  |  |           $stderr.puts Formatter.error "`brew bundle` failed! #{failure} Brewfile #{dependency} failed to install" | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |           return false | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         unless quiet | 
					
						
							|  |  |  |           dependency = Homebrew::Bundle::Dsl.pluralize_dependency(success) | 
					
						
							| 
									
										
										
										
											2025-03-19 09:51:39 +00:00
										 |  |  |           puts Formatter.success "`brew bundle` complete! #{success} Brewfile #{dependency} now installed." | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |