From 88a33da077f85900a03fefd2225a2d488bde5526 Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Wed, 18 Aug 2010 18:46:00 +0200 Subject: [PATCH] cros_extract_deps -j writes JSON, sorted by package name. Rationale: Consumers of this output should not have to eval() python code in order to use the output. Also potentially useful for dumping out of buildbot for consumption by other web-based tools. Review URL: http://codereview.chromium.org/3148022 --- cros_extract_deps | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cros_extract_deps b/cros_extract_deps index 87b7bdea93..03ba92cafa 100755 --- a/cros_extract_deps +++ b/cros_extract_deps @@ -5,8 +5,8 @@ """Extract dependency tree out of emerge and make it accessible and useful.""" +import json import optparse -import pprint import re import shutil import subprocess @@ -23,6 +23,14 @@ class ParseException(Exception): return self.reason +class SetEncoder(json.JSONEncoder): + """Custom json encoder class, doesn't hate set types.""" + def default(self, o): + if isinstance(o, set): + return list(o) + return json.JSONEncoder.default(self, o) + + def GetDepLinesFromPortage(options, packages): """Get dependency lines out of emerge. @@ -179,7 +187,7 @@ def main(): lines = GetDepLinesFromPortage(options, packages) deps_map = ParseDepLines(lines) - output = pprint.pformat(deps_map) + output = json.dumps(deps_map, sort_keys=True, indent=2, cls=SetEncoder) if options.output: output_file = open(options.output, 'w') output_file.write(output)