annotate contrib/deletebuild.py @ 869:467e993df52d 0.6.x

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