Graph your cookbooks deps
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
cbdir=ARGV[0] | |
output = "./deps.dot" | |
puts "Running on #{cbdir}..." | |
cb_meta = Dir.glob("#{cbdir}/*/metadata.rb") | |
fp=File.open(output,"w") | |
fp.write("digraph deps {\n") | |
cbs={} | |
cb_meta.each do |cb| | |
cb_name = cb.match(/#{cbdir}\/(.*)\/metadata.rb/)[1] | |
# puts "Looking for metadata from #{cb_name}" | |
infos = open(cb,"r") | |
infos.readlines.each do |line| | |
# get the version | |
if line =~ /^version/ then | |
version=line.match(/version.*"(.*)"/)[1] | |
puts "#{cb_name} : #{version}" | |
cbs[cb_name] = [] | |
end | |
# get a dependency | |
if line =~ /^depends/ then | |
depend=line.match(/depends.*"(.*)", "(.*)"/) | |
# depends with no version constraints | |
if depend then | |
dep_name=depend[1] | |
dep_version=depend[2] | |
else | |
# we have the version | |
depend=line.match(/depends.*"(.*)".*/) | |
dep_name=depend[1] | |
dep_version=nil | |
end | |
puts " depends from #{dep_name} #{dep_version}" | |
cbs[cb_name].push dep_name | |
end | |
end | |
puts "" | |
end | |
cbs.each_pair do |cb_name, cb_deps| | |
if cb_deps.empty? then | |
fp.write(" #{cb_name};\n") | |
else | |
cb_deps.each do |dep| | |
fp.write(" #{cb_name} -> #{dep};\n") | |
end | |
end | |
end | |
fp.write("}\n") | |
fp.close | |
# you will need graphviz & imagemagick | |
%x[dot -Tps ./deps.dot -o ./deps.ps] | |
%x[convert ./deps.ps ./deps.png] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment