Mercurial > bitten > bitten-test
annotate contrib/deletebuild.py @ 867:95696a84e1fa
Change upgrade documentation contents depth to 1 to exclude the schema version list.
author | hodgestar |
---|---|
date | Mon, 18 Oct 2010 11:27:28 +0000 |
parents | a24744710a65 |
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()) |