diff --git a/Library/Homebrew/cask_dependent.rb b/Library/Homebrew/cask_dependent.rb index 74b7419714..bf9a57c23f 100644 --- a/Library/Homebrew/cask_dependent.rb +++ b/Library/Homebrew/cask_dependent.rb @@ -15,8 +15,8 @@ class CaskDependent @cask.full_name end - def runtime_dependencies - recursive_dependencies + def runtime_dependencies(ignore_missing: false) + recursive_dependencies ignore_missing: ignore_missing end def deps @@ -43,8 +43,8 @@ class CaskDependent end end - def recursive_dependencies(&block) - Dependency.expand(self, &block) + def recursive_dependencies(ignore_missing: false, &block) + Dependency.expand(self, ignore_missing: ignore_missing, &block) end def recursive_requirements(&block) diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb index 2a37fe6671..aa5375112a 100644 --- a/Library/Homebrew/dependency.rb +++ b/Library/Homebrew/dependency.rb @@ -98,7 +98,7 @@ class Dependency # the list. # The default filter, which is applied when a block is not given, omits # optionals and recommendeds based on what the dependent has asked for - def expand(dependent, deps = dependent.deps, cache_key: nil, &block) + def expand(dependent, deps = dependent.deps, cache_key: nil, ignore_missing: false, &block) # Keep track dependencies to avoid infinite cyclic dependency recursion. @expand_stack ||= [] @expand_stack.push dependent.name @@ -113,19 +113,19 @@ class Dependency deps.each do |dep| next if dependent.name == dep.name - case action(dependent, dep, &block) + case action(dependent, dep, ignore_missing: ignore_missing, &block) when :prune next when :skip next if @expand_stack.include? dep.name - expanded_deps.concat(expand(dep.to_formula, cache_key: cache_key, &block)) + expanded_deps.concat(expand(dep.to_formula, cache_key: cache_key, ignore_missing: ignore_missing, &block)) when :keep_but_prune_recursive_deps expanded_deps << dep else next if @expand_stack.include? dep.name - expanded_deps.concat(expand(dep.to_formula, cache_key: cache_key, &block)) + expanded_deps.concat(expand(dep.to_formula, cache_key: cache_key, ignore_missing: ignore_missing, &block)) expanded_deps << dep end end @@ -137,9 +137,9 @@ class Dependency @expand_stack.pop end - def action(dependent, dep, &block) + def action(dependent, dep, ignore_missing: false, &block) catch(:action) do - prune if dep.unavailable_core_formula? + prune if ignore_missing && dep.unavailable_core_formula? if block yield dependent, dep diff --git a/Library/Homebrew/installed_dependents.rb b/Library/Homebrew/installed_dependents.rb index 20a7440e7d..7d231943e7 100644 --- a/Library/Homebrew/installed_dependents.rb +++ b/Library/Homebrew/installed_dependents.rb @@ -50,7 +50,8 @@ module InstalledDependents when Formula dependent.missing_dependencies(hide: keg_names) when Cask::Cask - CaskDependent.new(dependent).runtime_dependencies.map(&:to_formula) + # When checking for cask dependents, we don't care about missing dependencies + CaskDependent.new(dependent).runtime_dependencies(ignore_missing: true).map(&:to_formula) end required_kegs = required.map do |f|