| #!/usr/bin/env python | 
 |  | 
 | import plistlib | 
 |  | 
 | def main(): | 
 |     from optparse import OptionParser, OptionGroup | 
 |     parser = OptionParser("""\ | 
 | usage: %prog [options] <path> | 
 |  | 
 | Utility for dumping Clang-style logged diagnostics.\ | 
 | """) | 
 |     (opts, args) = parser.parse_args() | 
 |  | 
 |     if len(args) != 1: | 
 |         parser.error("invalid number of arguments") | 
 |  | 
 |     path, = args | 
 |  | 
 |     # Read the diagnostics log. | 
 |     f = open(path) | 
 |     try: | 
 |         data = f.read() | 
 |     finally: | 
 |         f.close() | 
 |  | 
 |     # Complete the plist (the log itself is just the chunks). | 
 |     data = """\ | 
 | <?xml version="1.0" encoding="UTF-8"?> | 
 | <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \ | 
 |                        "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | 
 | <plist version="1.0"> | 
 | <array> | 
 | %s | 
 | </array> | 
 | </plist>""" % data | 
 |  | 
 |     # Load the diagnostics. | 
 |     diags = plistlib.readPlistFromString(data) | 
 |  | 
 |     # Print out the diagnostics. | 
 |     print | 
 |     print "**** BUILD DIAGNOSTICS ****" | 
 |     for i, file_diags in enumerate(diags): | 
 |         file = file_diags.get('main-file') | 
 |         print "*** %s ***" % file | 
 |         for d in file_diags.get('diagnostics', ()): | 
 |             print "%s:%s:%s: %s: %s" % ( | 
 |                 d.get('filename'), d.get('line'), d.get('column'), | 
 |                 d.get('level'), d.get('message')) | 
 |  | 
 | if __name__ == "__main__": | 
 |     main() |