annotate contrib/deletebuild.py @ 864:a24744710a65

Fix printing of what will be deleted by deletebuild.
author hodgestar
date Mon, 18 Oct 2010 11:16:28 +0000
parents 9d65ffa31414
children
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,)
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
50 print "-------------------------------"
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
51
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
52 db = self.env.get_db_cnx()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
53 cursor = db.cursor()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
54
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
55 print "Attachments for build resource:"
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
56 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
57 config = cursor.fetchone()[0]
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
58 print " %s/%s" % (config, build)
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
59
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
60 print "Log files:"
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
61 print " ", "\n ".join(self._log_files(cursor, build))
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
62
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
63 print "Rows from bitten_log with ids:"
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
64 cursor.execute("SELECT id FROM bitten_log WHERE build=%s", (build,))
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
65 print " ", "\n ".join(str(row[0]) for row in cursor.fetchall())
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
66
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
67 print "Rows from bitten_report with ids:"
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
68 cursor.execute("SELECT id FROM bitten_report WHERE build=%s", (build,))
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
69 print " ", "\n ".join(str(row[0]) for row in cursor.fetchall())
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
70 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
71 print "also be deleted."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
72
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
73 print "Rows from bitten_step for this build with names:"
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
74 cursor.execute("SELECT name FROM bitten_step WHERE build=%s", (build,))
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
75 print " ", "\n ".join(str(row[0]) for row in cursor.fetchall())
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
76
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
77 print "Row from bitten_build with id:"
864
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
78 cursor.execute("SELECT id FROM bitten_build WHERE id=%s", (build,))
a24744710a65 Fix printing of what will be deleted by deletebuild.
hodgestar
parents: 862
diff changeset
79 print " ", "\n ".join(str(row[0]) for row in cursor.fetchall())
862
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
80
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
81 def remove(self, build):
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
82 """Delete what is linked to the build."""
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
83 print "Deleting items for build %r" % (build,)
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
84
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
85 db = self.env.get_db_cnx()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
86 cursor = db.cursor()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
87
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
88 print "Determining associated config."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
89 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
90 config = cursor.fetchone()[0]
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
91
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
92 print "Collecting log files."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
93 filenames = self._log_files(cursor, build)
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
94
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
95 try:
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
96 print "Deleting bitten_log entries."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
97 cursor.execute("DELETE FROM bitten_log WHERE build=%s", (build,))
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
98
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
99 print "Deleting bitten_report_item_entries."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
100 cursor.execute("DELETE FROM bitten_report_item WHERE report IN ("
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
101 "SELECT bitten_report.id FROM bitten_report "
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
102 "WHERE bitten_report.build=%s"
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
103 ")", (build,))
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
104
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
105 print "Deleting bitten_report entires."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
106 cursor.execute("DELETE FROM bitten_report WHERE build=%s",
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
107 (build,))
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
108
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
109 print "Deleting bitten_step entries."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
110 cursor.execute("DELETE FROM bitten_step WHERE build=%s", (build,))
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
111
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
112 print "Delete bitten_build entry."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
113 cursor.execute("DELETE FROM bitten_build WHERE id=%s", (build,))
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
114 except:
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
115 db.rollback()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
116 print "Build deletion failed. Database rolled back."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
117 raise
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
118
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
119 print "Bitten database changes committed."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
120 db.commit()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
121
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
122 print "Removing log files."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
123 for filename in filenames:
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
124 os.remove(filename)
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
125
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
126 print "Removing attachments."
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
127 resource = Resource('build', '%s/%s' % (config, build))
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
128 Attachment.delete_all(self.env, 'build', resource.id, db)
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
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
131 def main():
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
132 from optparse import OptionParser
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
133
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
134 parser = OptionParser(usage='usage: %prog env_path build_id',
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
135 version='%%prog %s' % __version__)
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
136
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
137 options, args = parser.parse_args()
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
138
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
139 if len(args) != 2:
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
140 parser.error('incorrect number of arguments')
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
141
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
142 env_path, build_id = args
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
143
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
144 deleter = BuildDeleter(env_path)
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
145 deleter.discover(build_id)
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
146 proceed = raw_input('Continue [y/n]? ')
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
147 if proceed == 'y':
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
148 deleter.remove(build_id)
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
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
151 if __name__ == "__main__":
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
152 import sys
9d65ffa31414 Add script for deleting duplicate builds encountered during upgrades.
hodgestar
parents:
diff changeset
153 sys.exit(main())
Copyright (C) 2012-2017 Edgewall Software