brew/Library/Homebrew/cask/lib/hbc/cask_dependencies.rb

36 lines
782 B
Ruby
Raw Normal View History

2016-08-18 22:11:42 +03:00
require "hbc/topological_hash"
2016-09-24 13:52:43 +02:00
module Hbc
class CaskDependencies
attr_reader :cask, :graph, :sorted
2016-08-18 22:11:42 +03:00
2016-09-24 13:52:43 +02:00
def initialize(cask)
@cask = cask
@graph = graph_dependencies
@sorted = sort
end
2016-08-18 22:11:42 +03:00
2016-09-24 13:52:43 +02:00
def graph_dependencies
deps_in = ->(csk) { csk.depends_on ? csk.depends_on.cask || [] : [] }
2016-10-23 14:44:14 +02:00
walk = lambda do |acc, deps|
2016-09-24 13:52:43 +02:00
deps.each do |dep|
next if acc.key?(dep)
succs = deps_in.call CaskLoader.load(dep)
2016-09-24 13:52:43 +02:00
acc[dep] = succs
walk.call(acc, succs)
end
acc
2016-10-23 14:44:14 +02:00
end
2016-08-18 22:11:42 +03:00
2016-09-24 13:52:43 +02:00
graphed = walk.call({}, @cask.depends_on.cask)
TopologicalHash[graphed]
end
2016-08-18 22:11:42 +03:00
2016-09-24 13:52:43 +02:00
def sort
@graph.tsort
rescue TSort::Cyclic
raise CaskCyclicCaskDependencyError, @cask.token
end
2016-08-18 22:11:42 +03:00
end
end