 4513a43d53
			
		
	
	
		4513a43d53
		
			
		
	
	
	
	
		
			
			Co-authored-by: Patrick Linnane <patrick@linnane.io> Co-authored-by: Carlo Cabrera <github@carlo.cab> Co-authored-by: Thierry Moisan <thierry.moisan@gmail.com> Co-authored-by: Mike McQuaid <mike@mikemcquaid.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: true # rubocop:todo Sorbet/StrictSigil
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "bundle/dsl"
 | |
| require "bundle/formula_installer"
 | |
| require "bundle/cask_installer"
 | |
| require "bundle/mac_app_store_installer"
 | |
| require "bundle/whalebrew_installer"
 | |
| require "bundle/vscode_extension_installer"
 | |
| require "bundle/tap_installer"
 | |
| require "bundle/skipper"
 | |
| 
 | |
| module Homebrew
 | |
|   module Bundle
 | |
|     module Installer
 | |
|       def self.install!(entries, global: false, file: nil, no_lock: false, no_upgrade: false, verbose: false,
 | |
|                         force: false, quiet: false)
 | |
|         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::FormulaInstaller.formula_upgradable?(name)
 | |
|             Homebrew::Bundle::FormulaInstaller
 | |
|           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)
 | |
|           $stderr.puts Formatter.error "`brew bundle` failed! #{failure} Brewfile #{dependency} failed to install"
 | |
|           return false
 | |
|         end
 | |
| 
 | |
|         unless quiet
 | |
|           dependency = Homebrew::Bundle::Dsl.pluralize_dependency(success)
 | |
|           puts Formatter.success "`brew bundle` complete! #{success} Brewfile #{dependency} now installed."
 | |
|         end
 | |
| 
 | |
|         true
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |