Mercurial > bitten > bitten-test
annotate contrib/deletebuild.py @ 862:9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
author | hodgestar |
---|---|
date | Mon, 18 Oct 2010 00:21:17 +0000 |
parents | |
children | a24744710a65 |
rev | line source |
---|---|
862
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
2 # |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
3 # Maintained by Simon Cross <hodegstar+bittencontrib@gmail.com> |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
4 # |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
5 # Copyright (C) 2010 Edgewall Software |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
6 # All rights reserved. |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
7 # |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
8 # This software is licensed as described in the file COPYING, which |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
9 # you should have received as part of this distribution. The terms |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
10 # are also available at http://bitten.edgewall.org/wiki/License. |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
11 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
12 """Utility for deleting duplicate builds encounted while upgrading |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
13 to schema version 10.""" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
14 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
15 import os |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
16 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
17 from trac.env import Environment |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
18 from trac.attachment import Attachment |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
19 from trac.resource import Resource |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
20 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
21 __version__ = "1.0a1" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
22 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
23 class BuildDeleter(object): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
24 """Class for deleting a build.""" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
25 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
26 def __init__(self, env_path): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
27 self.env = Environment(env_path) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
28 self.logs_dir = self.env.config.get('bitten', 'logs_dir', 'log/bitten') |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
29 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
30 def _log_files(self, cursor, build): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
31 """Return a list of log files.""" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
32 cursor.execute("SELECT filename FROM bitten_log WHERE build=%s", |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
33 (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
34 rows = cursor.fetchall() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
35 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
36 all_files = [] |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
37 for row in rows: |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
38 filename = row[0] |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
39 file_prefix = os.path.join(self.logs_dir, filename) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
40 for suffix in ['', '.level', '.levels']: |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
41 log_file = file_prefix + suffix |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
42 if os.path.isfile(log_file): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
43 all_files.append(log_file) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
44 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
45 return all_files |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
46 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
47 def discover(self, build): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
48 """Print a summary of what is linked to the build.""" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
49 print "Items to delete for build %r" % (build,) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
50 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
51 db = self.env.get_db_cnx() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
52 cursor = db.cursor() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
53 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
54 print "Attachments for build resource:" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
55 cursor.execute("SELECT config FROM bitten_build WHERE id=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
56 config = cursor.fetchone()[0] |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
57 print "\n %s/%s" % (config, build) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
58 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
59 print "Log files:" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
60 print "\n ".join(self._log_files(cursor, build)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
61 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
62 print "Rows from bitten_log with ids:" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
63 cursor.execute("SELECT id FROM bitten_log WHERE build=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
64 print "\n ".join(row[0] for row in cursor.fetchall()) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
65 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
66 print "Rows from bitten_report with ids:" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
67 cursor.execute("SELECT id FROM bitten_report WHERE build=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
68 print "\n ".join(row[0] for row in cursor.fetchall()) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
69 print "Rows from bitten_report_item with report set to these ids will" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
70 print "also be deleted." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
71 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
72 print "Rows from bitten_step for this build with names:" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
73 cursor.execute("SELECT name FROM bitten_step WHERE build=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
74 print "\n ".join(row[0] for row in cursor.fetchall()) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
75 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
76 print "Row from bitten_build with id:" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
77 cursor.execute("SELECT name FROM bitten_step WHERE build=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
78 print "\n ".join(row[0] for row in cursor.fetchall()) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
79 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
80 def remove(self, build): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
81 """Delete what is linked to the build.""" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
82 print "Deleting items for build %r" % (build,) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
83 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
84 db = self.env.get_db_cnx() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
85 cursor = db.cursor() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
86 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
87 print "Determining associated config." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
88 cursor.execute("SELECT config FROM bitten_build WHERE id=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
89 config = cursor.fetchone()[0] |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
90 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
91 print "Collecting log files." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
92 filenames = self._log_files(cursor, build) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
93 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
94 try: |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
95 print "Deleting bitten_log entries." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
96 cursor.execute("DELETE FROM bitten_log WHERE build=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
97 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
98 print "Deleting bitten_report_item_entries." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
99 cursor.execute("DELETE FROM bitten_report_item WHERE report IN (" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
100 "SELECT bitten_report.id FROM bitten_report " |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
101 "WHERE bitten_report.build=%s" |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
102 ")", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
103 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
104 print "Deleting bitten_report entires." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
105 cursor.execute("DELETE FROM bitten_report WHERE build=%s", |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
106 (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
107 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
108 print "Deleting bitten_step entries." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
109 cursor.execute("DELETE FROM bitten_step WHERE build=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
110 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
111 print "Delete bitten_build entry." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
112 cursor.execute("DELETE FROM bitten_build WHERE id=%s", (build,)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
113 except: |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
114 db.rollback() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
115 print "Build deletion failed. Database rolled back." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
116 raise |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
117 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
118 print "Bitten database changes committed." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
119 db.commit() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
120 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
121 print "Removing log files." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
122 for filename in filenames: |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
123 os.remove(filename) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
124 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
125 print "Removing attachments." |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
126 resource = Resource('build', '%s/%s' % (config, build)) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
127 Attachment.delete_all(self.env, 'build', resource.id, db) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
128 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
129 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
130 def main(): |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
131 from optparse import OptionParser |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
132 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
133 parser = OptionParser(usage='usage: %prog env_path build_id', |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
134 version='%%prog %s' % __version__) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
135 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
136 options, args = parser.parse_args() |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
137 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
138 if len(args) != 2: |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
139 parser.error('incorrect number of arguments') |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
140 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
141 env_path, build_id = args |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
142 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
143 deleter = BuildDeleter(env_path) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
144 deleter.discover(build_id) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
145 proceed = raw_input('Continue [y/n]? ') |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
146 if proceed == 'y': |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
147 deleter.remove(build_id) |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
148 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
149 |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
150 if __name__ == "__main__": |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
151 import sys |
9d65ffa31414
Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff
changeset
|
152 sys.exit(main()) |