Home | History | Annotate | Download | only in utils
      1 #!/usr/bin/env python
      2 
      3 import plistlib
      4 
      5 def main():
      6     from optparse import OptionParser, OptionGroup
      7     parser = OptionParser("""\
      8 usage: %prog [options] <path>
      9 
     10 Utility for dumping Clang-style logged diagnostics.\
     11 """)
     12     (opts, args) = parser.parse_args()
     13 
     14     if len(args) != 1:
     15         parser.error("invalid number of arguments")
     16 
     17     path, = args
     18 
     19     # Read the diagnostics log.
     20     f = open(path)
     21     try:
     22         data = f.read()
     23     finally:
     24         f.close()
     25 
     26     # Complete the plist (the log itself is just the chunks).
     27     data = """\
     28 <?xml version="1.0" encoding="UTF-8"?>
     29 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
     30                        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     31 <plist version="1.0">
     32 <array>
     33 %s
     34 </array>
     35 </plist>""" % data
     36 
     37     # Load the diagnostics.
     38     diags = plistlib.readPlistFromString(data)
     39 
     40     # Print out the diagnostics.
     41     print
     42     print "**** BUILD DIAGNOSTICS ****"
     43     for i, file_diags in enumerate(diags):
     44         file = file_diags.get('main-file')
     45         print "*** %s ***" % file
     46         for d in file_diags.get('diagnostics', ()):
     47             print "%s:%s:%s: %s: %s" % (
     48                 d.get('filename'), d.get('line'), d.get('column'),
     49                 d.get('level'), d.get('message'))
     50 
     51 if __name__ == "__main__":
     52     main()
     53