summaryrefslogtreecommitdiffstats
path: root/tasks/rake/git_workflow.rake
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@rimspace.net>2011-01-22 21:41:52 -0800
committerDaniel Pittman <daniel@rimspace.net>2011-02-03 16:45:30 -0800
commit34a57b846319f2962f78b161cd80b15f491e1086 (patch)
treed6091d3eb324b3873d4437716d158f69a26f2af4 /tasks/rake/git_workflow.rake
parent403adb8af42cc79701b5ff47b377e7dc1e192a34 (diff)
downloadpuppet-34a57b846319f2962f78b161cd80b15f491e1086.tar.gz
puppet-34a57b846319f2962f78b161cd80b15f491e1086.tar.xz
puppet-34a57b846319f2962f78b161cd80b15f491e1086.zip
Feature #2597 -- really find and report cycles.
This implements Tarjan's algorithm for finding strongly connected components in a directed graph, and leverages that to find cycles. This allows us to report the minimum set of nodes in each cycle, as well as reporting each cycle discretely if there are multiple of them. While this can still produce overwhelming and/or unhelpful output, it represents a large step forward in delivering useful information when a cycle is detected. This presently reports the set of nodes that contain the cycle, in no particular order, rather than the set of edges connecting those nodes. Sadly, it also suffers a limitation: the implementation of Tarjan's algorithm used to find strongly connected components is recursive, so is limited by the maximum Ruby stack depth to dependency chains less than 1,000 nodes deep. While this is probably not a limit in practice, it is a nasty limitation, and other considerations (like Ruby stack consumption across versions) could trigger this much sooner than is desirable.
Diffstat (limited to 'tasks/rake/git_workflow.rake')
0 files changed, 0 insertions, 0 deletions