Fix revision_from_logs.
[build-farm.git] / tools / fix.py
1 #!/usr/bin/python
2
3 import os
4 import sys
5 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
6
7 from buildfarm.build import (
8     build_status_from_logs,
9     LogFileMissing,
10     MissingRevisionInfo,
11     revision_from_log,
12     )
13 from buildfarm.hostdb import NoSuchHost
14
15 from buildfarm.sqldb import StormCachingBuildFarm, StormBuild
16
17 buildfarm = StormCachingBuildFarm()
18
19 store = buildfarm._get_store()
20
21 for build in store.find(StormBuild, StormBuild.status_str == None):
22     try:
23         log = build.read_log()
24     except LogFileMissing:
25         print "Killing build %r without status string or log." % build
26         log.remove()
27         continue
28     try:
29         err = build.read_err()
30         try:
31             status = build_status_from_logs(log, err)
32         finally:
33             err.close()
34     finally:
35         log.close()
36     build.status_str = status.__serialize__()
37     print "Updating status for %r" % build
38
39
40 for build in store.find(StormBuild, StormBuild.revision == None):
41     try:
42         log = build.read_log()
43     except LogFileMissing:
44         print "Killing build %r without revision or log." % build
45         build.remove()
46         continue
47     try:
48         revision = revision_from_log(log)
49     except MissingRevisionInfo:
50         continue
51     assert revision
52     build.revision = revision
53     print "Updating revision for %r" % build
54
55 for build in store.find(StormBuild, StormBuild.host_id == None):
56     try:
57         build.host_id = buildfarm.hostdb[build.host].id
58     except NoSuchHost, e:
59         print "Unable to find host %s" % e.name
60
61 buildfarm.commit()