~james-w/udd/storm-sqlite

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/python

import datetime
import os
import sys

from bzrlib import workingtree
from bzrlib.diff import show_diff_trees

base_dir = "/srv/package-import.canonical.com/new"
logs_dir = os.path.join(base_dir, "logs")
revids_dir = os.path.join(base_dir, "revids")

now = datetime.datetime.now()

wt = workingtree.WorkingTree.open(logs_dir)
wt.lock_write()
try:
    wt.smart_add([logs_dir])
    old_rev = wt.branch.last_revision()
    new_rev = wt.commit("Status check at %s" % now)

    rev_wt = workingtree.WorkingTree.open(revids_dir)
    rev_wt.lock_write()
    try:
        rev_wt.smart_add([revids_dir])
        old_rev_rev = rev_wt.branch.last_revision()
        new_rev_rev = rev_wt.commit("Status check at %s" % now)
        
        print "Status at %s" % now
        print "revid:%s" % new_rev
        print ""
        
        old_tree = wt.branch.repository.revision_tree(old_rev)
        new_tree = wt.branch.repository.revision_tree(new_rev)

        old_rev_tree = rev_wt.branch.repository.revision_tree(old_rev_rev)
        new_rev_tree = rev_wt.branch.repository.revision_tree(new_rev_rev)
        
        changes = new_tree.changes_from(old_tree)
        
        new_success = set()
        failures = set()
        changed_success = set()
        
        for addition in changes.added:
            if addition[0].startswith("failures"):
                failures.add(addition)
            else:
                new_success.add(addition)
        
        for modified in changes.modified:
            if modified[0].startswith("failures"):
                failures.add(modified)
            else:
                changed_success.add(modified)
        
        rev_changes = new_rev_tree.changes_from(old_rev_tree)
        
        imported_packages = set()
        
        for addition in rev_changes.added:
            package_name = addition[0]
            if "/" in package_name:
                package_name = package_name[:package_name.index("/")]
            imported_packages.add(package_name)
        
        for modified in rev_changes.modified:
            package_name = modified[0]
            if "/" in package_name:
                package_name = package_name[:package_name.index("/")]
            imported_packages.add(package_name)
        
        print "Packages touched: %d" % len(changed_success)
        print "Imported packages: %d" % len(imported_packages)
        print ""
        
        if len(failures) > 0:
            print "%d failures:" % len(failures)
            for failure in failures:
                print "    " + failure[0]
                file_id = new_tree.path2id(failure[0])
                if file_id is None:
                     continue
                text = new_tree.get_file_text(file_id, path=failure[0])
                print text
                print ""
            print ""
        
        
        if len(new_success) > 0:
            print "Newly successful:"
            for success in new_success:
                print "    " + success[0]
            print ""
        
        show_diff_trees(old_rev_tree, new_rev_tree, sys.stdout)
    finally:
        rev_wt.unlock()
finally:
    wt.unlock()

print "End of report"