Class: Gitlab::Ci::YamlProcessor::Dag
- Inherits:
-
Object
- Object
- Gitlab::Ci::YamlProcessor::Dag
- Includes:
- TSort
- Defined in:
- lib/gitlab/ci/yaml_processor/dag.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(nodes) ⇒ Dag
constructor
A new instance of Dag.
- #tsort_each_child(node, &block) ⇒ Object
- #tsort_each_node(&block) ⇒ Object
Constructor Details
#initialize(nodes) ⇒ Dag
Returns a new instance of Dag.
10 11 12 |
# File 'lib/gitlab/ci/yaml_processor/dag.rb', line 10 def initialize(nodes) @nodes = nodes end |
Class Method Details
.check_circular_dependencies!(jobs) ⇒ Object
18 19 20 21 22 |
# File 'lib/gitlab/ci/yaml_processor/dag.rb', line 18 def self.check_circular_dependencies!(jobs) new(jobs).tsort rescue TSort::Cyclic => e raise ValidationError, "The pipeline has circular dependencies: #{e.}" end |
.order(jobs) ⇒ Object
14 15 16 |
# File 'lib/gitlab/ci/yaml_processor/dag.rb', line 14 def self.order(jobs) new(jobs).tsort end |
Instance Method Details
#tsort_each_child(node, &block) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/gitlab/ci/yaml_processor/dag.rb', line 24 def tsort_each_child(node, &block) return unless @nodes[node] raise TSort::Cyclic, "self-dependency: #{node}" if @nodes[node].include?(node) @nodes[node].each(&block) end |
#tsort_each_node(&block) ⇒ Object
32 33 34 |
# File 'lib/gitlab/ci/yaml_processor/dag.rb', line 32 def tsort_each_node(&block) @nodes.each_key(&block) end |