From bb4ee091a0211a4c96f255f7ead1beb64701d9f8 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 16 Dec 2012 16:33:29 +0000 Subject: Add a subcommand graph-projects --- jenkinstool | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'jenkinstool') diff --git a/jenkinstool b/jenkinstool index 014c6a5..728bddc 100755 --- a/jenkinstool +++ b/jenkinstool @@ -774,6 +774,44 @@ class JenkinsTool(cliapp.Application): jenkins = simplejenkinsapi.Jenkins(self.jenkins_url) jenkins.update_job(job_id, f.read()) + def cmd_graph_projects(self, args): + '''Output a graphviz file showing project dependencies.''' + + def find(config, name): + for project in config['projects']: + if project['name'] == name: + return project + return None + + def write_graphviz(f, config, project_names): + done = set() + f.write('strict digraph foo {\n') + while project_names: + name = project_names.pop() + if name not in done: + done.add(name) + project = find(config, name) + if project: + for dep in project.get('build-depends', []): + f.write('"%s" -> "%s";\n' % (name, dep)) + project_names.append(dep) + + f.write('}\n') + + if len(args) == 0: + return + + filename = args[0] + with open(filename) as f: + config = json.load(f) + + if len(args) > 1: + project_names = args[1:] + else: + project_names = [p['name'] for p in config['projects']] + + write_graphviz(self.output, config, project_names) + def cmd_run_jobs(self, args): '''Update Jenkmins with jobs based specification, then run them.''' -- cgit v1.2.1