You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gump.apache.org by bo...@apache.org on 2010/08/11 20:26:02 UTC
svn commit: r984515 - /gump/trunk/python/gump/tool/dot/dot.py
Author: bodewig
Date: Wed Aug 11 18:26:02 2010
New Revision: 984515
URL: http://svn.apache.org/viewvc?rev=984515&view=rev
Log:
allow to emit the dependency graph for a set of projects that match an expression
Modified:
gump/trunk/python/gump/tool/dot/dot.py
Modified: gump/trunk/python/gump/tool/dot/dot.py
URL: http://svn.apache.org/viewvc/gump/trunk/python/gump/tool/dot/dot.py?rev=984515&r1=984514&r2=984515&view=diff
==============================================================================
--- gump/trunk/python/gump/tool/dot/dot.py (original)
+++ gump/trunk/python/gump/tool/dot/dot.py Wed Aug 11 18:26:02 2010
@@ -18,28 +18,53 @@
import sys
from gump.core.config import default
from gump.core.loader.loader import WorkspaceLoader
-from gump.core.run.gumpset import GumpSet
+from gump.core.run.gumprun import GumpRun
def write_to_dot_file(gump_set, dot_file_name):
"""
Writes a dependency graph for the given GumpSet to the named file
using the DOT language.
"""
+ hull = set(p.getName() for p in gump_set.getProjects())
+
dot = open(dot_file_name, "w")
dot.write("digraph {\n")
for project in gump_set.getProjects():
- for dep in project.getDirectDependencies():
- dot.write('\t"%s" -> "%s"\n' % (project.getName(),
- dep.getProject().getName()))
- for dep in project.get_removed_dependencies():
- dot.write('\t"%s" -> "%s" [color = red]\n' %
- (project.getName(), dep.getProject().getName()))
+ _write_edges_for_project(project, dot, hull)
dot.write("}\n")
+def _write_edges_for_project(project, dot, hull):
+ """
+ Writes all edges starting in project and may recurse into all
+ dependencies unless they are already contained in the set of
+ projects to visit/visited
+ """
+ for dep in project.getDirectDependencies():
+ _write_edge_and_maybe_recurse(project, dep.getProject(), '', dot, hull)
+ for dep in project.get_removed_dependencies():
+ _write_edge_and_maybe_recurse(project, dep.getProject(),
+ ' [color = red]', dot, hull)
+
+def _write_edge_and_maybe_recurse(left, right, style, dot, hull):
+ """
+ Writes a single edgre from left to right and may recurse into
+ right unless it is already contained in the set of projects to
+ visit/visited
+ """
+ dot.write('\t"%s" -> "%s"%s\n' % (left.getName(), right.getName(), style))
+ if not right.getName() in hull:
+ hull.add(right.getName())
+ _write_edges_for_project(right, dot, hull)
+
if __name__ == '__main__':
- if len(sys.argv) != 3:
- print "requires exactly two args: worksapce and outputfile"
+ if not len(sys.argv) in [3, 4]:
+ print "requires two args: workspace and outputfile and has one " + \
+ "optional: project"
exit(1)
default.date_s = default.datetime.strftime('YYYYMMDD')
+ default.datetime_s = default.datetime.strftime('YYYYMMDD-hhmmss')
WORKSPACE = WorkspaceLoader().load(sys.argv[1])
- write_to_dot_file(GumpSet(WORKSPACE), sys.argv[2])
+ write_to_dot_file(GumpRun(WORKSPACE,
+ len(sys.argv) == 4 and sys.argv[3] or None)
+ .getGumpSet(),
+ sys.argv[2])