Method: Puppet::Graph::SimpleGraph#paths_in_cycle
- Defined in:
- lib/puppet/graph/simple_graph.rb
#paths_in_cycle(cycle, max_paths = 1) ⇒ Object
Perform a BFS on the sub graph representing the cycle, with a view to generating a sufficient set of paths to report the cycle meaningfully, and ideally usefully, for the end user.
BFS is preferred because it will generally report the shortest paths through the graph first, which are more likely to be interesting to the user. I think; it would be interesting to verify that. –daniel 2011-01-23
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/puppet/graph/simple_graph.rb', line 199 def paths_in_cycle(cycle, max_paths = 1) # TRANSLATORS "negative or zero" refers to the count of paths raise ArgumentError, _("negative or zero max_paths") if max_paths < 1 # Calculate our filtered outbound vertex lists... adj = {} cycle.each do |vertex| adj[vertex] = adjacent(vertex).select { |s| cycle.member? s } end found = [] # frame struct is vertex, [path] stack = [[cycle.first, []]] while frame = stack.shift # rubocop:disable Lint/AssignmentInCondition if frame[1].member?(frame[0]) then found << frame[1] + [frame[0]] break if found.length >= max_paths else adj[frame[0]].each do |to| stack.push [to, frame[1] + [frame[0]]] end end end found.sort end |