aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib/hbc/installer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/cask/lib/hbc/installer.rb')
-rw-r--r--Library/Homebrew/cask/lib/hbc/installer.rb86
1 files changed, 44 insertions, 42 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/installer.rb b/Library/Homebrew/cask/lib/hbc/installer.rb
index aa6d600f7..252205a3b 100644
--- a/Library/Homebrew/cask/lib/hbc/installer.rb
+++ b/Library/Homebrew/cask/lib/hbc/installer.rb
@@ -1,11 +1,14 @@
require "rubygems"
+require "formula_installer"
+
require "hbc/cask_dependencies"
require "hbc/staged"
require "hbc/verify"
module Hbc
class Installer
+ extend Predicable
# TODO: it is unwise for Hbc::Staged to be a module, when we are
# dealing with both staged and unstaged Casks here. This should
# either be a class which is only sometimes instantiated, or there
@@ -27,21 +30,7 @@ module Hbc
@reinstall = false
end
- def skip_cask_deps?
- @skip_cask_deps
- end
-
- def force?
- @force
- end
-
- def binaries?
- @binaries
- end
-
- def verbose?
- @verbose
- end
+ attr_predicate :binaries?, :force?, :skip_cask_deps?, :require_sha?, :verbose?
def self.print_caveats(cask)
odebug "Printing caveats"
@@ -75,7 +64,7 @@ module Hbc
odebug "Hbc::Installer#fetch"
satisfy_dependencies
- verify_has_sha if @require_sha && !force?
+ verify_has_sha if require_sha? && !force?
download
verify
end
@@ -210,7 +199,6 @@ module Hbc
x11_dependencies
formula_dependencies
cask_dependencies unless skip_cask_deps?
- puts "complete"
end
def macos_dependencies
@@ -247,36 +235,50 @@ module Hbc
end
def formula_dependencies
- return unless @cask.depends_on.formula && !@cask.depends_on.formula.empty?
- ohai "Installing Formula dependencies from Homebrew"
- @cask.depends_on.formula.each do |dep_name|
- print "#{dep_name} ... "
- installed = @command.run(HOMEBREW_BREW_FILE,
- args: ["list", "--versions", dep_name],
- print_stderr: false).stdout.include?(dep_name)
- if installed
- puts "already installed"
- else
- @command.run!(HOMEBREW_BREW_FILE,
- args: ["install", dep_name])
- puts "done"
+ formulae = @cask.depends_on.formula.map { |f| Formula[f] }
+ return if formulae.empty?
+
+ if formulae.all?(&:any_version_installed?)
+ puts "All Formula dependencies satisfied."
+ return
+ end
+
+ not_installed = formulae.reject(&:any_version_installed?)
+
+ ohai "Installing Formula dependencies: #{not_installed.map(&:to_s).join(", ")}"
+ not_installed.each do |formula|
+ begin
+ old_argv = ARGV.dup
+ ARGV.replace([])
+ FormulaInstaller.new(formula).tap do |fi|
+ fi.installed_as_dependency = true
+ fi.installed_on_request = false
+ fi.show_header = true
+ fi.verbose = verbose?
+ fi.prelude
+ fi.install
+ fi.finish
+ end
+ ensure
+ ARGV.replace(old_argv)
end
end
end
def cask_dependencies
- return unless @cask.depends_on.cask && !@cask.depends_on.cask.empty?
- ohai "Installing Cask dependencies: #{@cask.depends_on.cask.join(", ")}"
- deps = CaskDependencies.new(@cask)
- deps.sorted.each do |dep_token|
- puts "#{dep_token} ..."
- dep = CaskLoader.load(dep_token)
- if dep.installed?
- puts "already installed"
- else
- Installer.new(dep, binaries: binaries?, verbose: verbose?, skip_cask_deps: true, force: false).install
- puts "done"
- end
+ return if @cask.depends_on.cask.empty?
+ casks = CaskDependencies.new(@cask)
+
+ if casks.all?(&:installed?)
+ puts "All Cask dependencies satisfied."
+ return
+ end
+
+ not_installed = casks.reject(&:installed?)
+
+ ohai "Installing Cask dependencies: #{not_installed.map(&:to_s).join(", ")}"
+ not_installed.each do |cask|
+ Installer.new(cask, binaries: binaries?, verbose: verbose?, skip_cask_deps: true, force: false).install
end
end