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
This commit is contained in:
Sean O'Connor 2010-08-18 18:46:00 +02:00
parent 12f14ce889
commit 88a33da077

View File

@ -5,8 +5,8 @@
"""Extract dependency tree out of emerge and make it accessible and useful.""" """Extract dependency tree out of emerge and make it accessible and useful."""
import json
import optparse import optparse
import pprint
import re import re
import shutil import shutil
import subprocess import subprocess
@ -23,6 +23,14 @@ class ParseException(Exception):
return self.reason 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): def GetDepLinesFromPortage(options, packages):
"""Get dependency lines out of emerge. """Get dependency lines out of emerge.
@ -179,7 +187,7 @@ def main():
lines = GetDepLinesFromPortage(options, packages) lines = GetDepLinesFromPortage(options, packages)
deps_map = ParseDepLines(lines) deps_map = ParseDepLines(lines)
output = pprint.pformat(deps_map) output = json.dumps(deps_map, sort_keys=True, indent=2, cls=SetEncoder)
if options.output: if options.output:
output_file = open(options.output, 'w') output_file = open(options.output, 'w')
output_file.write(output) output_file.write(output)