#!/usr/bin/env python3 # Copyright 2013 The Servo Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution. # # Licensed under the Apache License, Version 2.0 or the MIT license # , at your # option. This file may not be copied, modified, or distributed # except according to those terms. import json import os import subprocess import sys def main(crate=None): os.chdir(os.path.join(os.path.dirname(__file__), "..")) meta = json.loads(subprocess.check_output(["cargo", "metadata", "--format-version", "1"])) graph = {} for package in meta["packages"]: if package["source"] is None: # Lives in this repo for dependency in package["dependencies"]: if dependency["source"] is None: # Also lives in this repo graph.setdefault(package["name"], []).append(dependency["name"]) if crate: filtered = {} seen = set() def traverse(name): if name not in seen: seen.add(name) for dependency in graph.get(name, []): filtered.setdefault(name, []).append(dependency) traverse(dependency) traverse(crate) else: filtered = graph print("// This is in Graphviz DOT format.") print("// Use the 'dot' or 'xdot' tool to visualize.") print('digraph "local crates" {') for package, dependencies in filtered.items(): for dependency in dependencies: print(' "%s" -> "%s";' % (package, dependency)) print("}") if __name__ == "__main__": sys.exit(main(*sys.argv[1:]))