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())
Copyright (C) 2012-2017 Edgewall Software