2012-07-18 03:36:07 -07:00
|
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import sys
|
2012-09-28 03:25:35 -07:00
|
|
|
import collections
|
2012-07-18 03:36:07 -07:00
|
|
|
|
|
|
|
import writeMakefile
|
|
|
|
|
|
|
|
def extractLines(fp):
|
|
|
|
lines = []
|
|
|
|
watch = False
|
|
|
|
for line in fp:
|
|
|
|
if line == '@@@ @@@ Failures\n':
|
|
|
|
watch = True
|
|
|
|
elif watch:
|
|
|
|
watch = False
|
|
|
|
idx = line.index('@@@')
|
|
|
|
lines.append((line[:idx], line[idx + 3:]))
|
|
|
|
return lines
|
|
|
|
|
|
|
|
def ensuredir(path):
|
|
|
|
dir = path[:path.rfind('/')]
|
|
|
|
if not os.path.exists(dir):
|
|
|
|
os.makedirs(dir)
|
|
|
|
|
|
|
|
def dumpFailures(lines):
|
|
|
|
files = []
|
|
|
|
for url, objstr in lines:
|
|
|
|
if objstr == '{}\n':
|
|
|
|
continue
|
|
|
|
|
2012-09-30 00:52:06 -07:00
|
|
|
# Avoid overly large diffs.
|
2012-10-14 00:46:46 -07:00
|
|
|
if 'editing/' in url:
|
2012-09-30 00:52:06 -07:00
|
|
|
sep = ':'
|
|
|
|
else:
|
|
|
|
sep = ': '
|
|
|
|
|
2012-07-18 03:36:07 -07:00
|
|
|
jsonpath = 'failures/' + url + '.json'
|
|
|
|
files.append(jsonpath)
|
|
|
|
ensuredir(jsonpath)
|
2012-09-28 03:25:35 -07:00
|
|
|
obj = json.loads(objstr, object_pairs_hook=collections.OrderedDict)
|
2012-09-30 00:52:06 -07:00
|
|
|
formattedobj = json.dumps(obj, indent=2, separators=(',', sep))
|
2012-07-18 03:36:07 -07:00
|
|
|
fp = open(jsonpath, 'w')
|
|
|
|
fp.write(formattedobj + '\n')
|
|
|
|
fp.close()
|
|
|
|
return files
|
|
|
|
|
|
|
|
def writeMakefiles(files):
|
|
|
|
pathmap = {}
|
|
|
|
for path in files:
|
|
|
|
dirp, leaf = path.rsplit('/', 1)
|
|
|
|
pathmap.setdefault(dirp, []).append(leaf)
|
|
|
|
|
|
|
|
for k, v in pathmap.iteritems():
|
2012-09-06 00:14:48 -07:00
|
|
|
result = writeMakefile.substMakefile('parseFailures.py', [], v)
|
2012-07-18 03:36:07 -07:00
|
|
|
|
|
|
|
fp = open(k + '/Makefile.in', 'wb')
|
|
|
|
fp.write(result)
|
|
|
|
fp.close()
|
|
|
|
|
|
|
|
def main(logPath):
|
|
|
|
fp = open(logPath, 'rb')
|
|
|
|
lines = extractLines(fp)
|
|
|
|
fp.close()
|
|
|
|
|
|
|
|
files = dumpFailures(lines)
|
|
|
|
writeMakefiles(files)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
if len(sys.argv) < 2:
|
|
|
|
print "Please pass the path to the logfile from which failures should be extracted."
|
|
|
|
main(sys.argv[1])
|