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"
|