##// END OF EJS Templates
Format table list....
Jean-Philippe Lang -
r12761:bf37fd969599
parent child
Show More
@@ -1,178 +1,179
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2014 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 namespace :redmine do
19 19 namespace :attachments do
20 20 desc 'Removes uploaded files left unattached after one day.'
21 21 task :prune => :environment do
22 22 Attachment.prune
23 23 end
24 24
25 25 desc 'Moves attachments stored at the root of the file directory (ie. created before Redmine 2.3) to their subdirectories'
26 26 task :move_to_subdirectories => :environment do
27 27 Attachment.move_from_root_to_target_directory
28 28 end
29 29 end
30 30
31 31 namespace :tokens do
32 32 desc 'Removes expired tokens.'
33 33 task :prune => :environment do
34 34 Token.destroy_expired
35 35 end
36 36 end
37 37
38 38 namespace :watchers do
39 39 desc 'Removes watchers from what they can no longer view.'
40 40 task :prune => :environment do
41 41 Watcher.prune
42 42 end
43 43 end
44 44
45 45 desc 'Fetch changesets from the repositories'
46 46 task :fetch_changesets => :environment do
47 47 Repository.fetch_changesets
48 48 end
49 49
50 50 desc 'Migrates and copies plugins assets.'
51 51 task :plugins do
52 52 Rake::Task["redmine:plugins:migrate"].invoke
53 53 Rake::Task["redmine:plugins:assets"].invoke
54 54 end
55 55
56 56 desc <<-DESC
57 57 FOR EXPERIMENTAL USE ONLY, Moves Redmine data from production database to the development database.
58 58 This task should only be used when you need to move data from one DBMS to a different one (eg. MySQL to PostgreSQL).
59 59 WARNING: All data in the development database is deleted.
60 60 DESC
61 61
62 62 task :migrate_dbms => :environment do
63 63 ActiveRecord::Base.establish_connection :development
64 64 target_tables = ActiveRecord::Base.connection.tables
65 65 ActiveRecord::Base.remove_connection
66 66
67 67 ActiveRecord::Base.establish_connection :production
68 68 tables = ActiveRecord::Base.connection.tables.sort - %w(schema_migrations plugin_schema_info)
69 69
70 70 if (tables - target_tables).any?
71 abort "The following table(s) are missing from the target database: #{(tables - target_tables).join(', ')}"
71 list = (tables - target_tables).map {|table| "* #{table}"}.join("\n")
72 abort "The following table(s) are missing from the target database:\n#{list}"
72 73 end
73 74
74 75 tables.each do |table_name|
75 76 Source = Class.new(ActiveRecord::Base)
76 77 Target = Class.new(ActiveRecord::Base)
77 78 Target.establish_connection(:development)
78 79
79 80 [Source, Target].each do |klass|
80 81 klass.table_name = table_name
81 82 klass.reset_column_information
82 83 klass.inheritance_column = "foo"
83 84 klass.record_timestamps = false
84 85 end
85 86 Target.primary_key = (Target.column_names.include?("id") ? "id" : nil)
86 87
87 88 source_count = Source.count
88 89 puts "Migrating %6d records from #{table_name}..." % source_count
89 90
90 91 Target.delete_all
91 92 offset = 0
92 93 while (objects = Source.offset(offset).limit(5000).order("1,2").to_a) && objects.any?
93 94 offset += objects.size
94 95 Target.transaction do
95 96 objects.each do |object|
96 97 new_object = Target.new(object.attributes)
97 98 new_object.id = object.id if Target.primary_key
98 99 new_object.save(:validate => false)
99 100 end
100 101 end
101 102 end
102 103 Target.connection.reset_pk_sequence!(table_name) if Target.primary_key
103 104 target_count = Target.count
104 105 abort "Some records were not migrated" unless source_count == target_count
105 106 end
106 107 end
107 108
108 109 namespace :plugins do
109 110 desc 'Migrates installed plugins.'
110 111 task :migrate => :environment do
111 112 name = ENV['NAME']
112 113 version = nil
113 114 version_string = ENV['VERSION']
114 115 if version_string
115 116 if version_string =~ /^\d+$/
116 117 version = version_string.to_i
117 118 if name.nil?
118 119 abort "The VERSION argument requires a plugin NAME."
119 120 end
120 121 else
121 122 abort "Invalid VERSION #{version_string} given."
122 123 end
123 124 end
124 125
125 126 begin
126 127 Redmine::Plugin.migrate(name, version)
127 128 rescue Redmine::PluginNotFound
128 129 abort "Plugin #{name} was not found."
129 130 end
130 131
131 132 Rake::Task["db:schema:dump"].invoke
132 133 end
133 134
134 135 desc 'Copies plugins assets into the public directory.'
135 136 task :assets => :environment do
136 137 name = ENV['NAME']
137 138
138 139 begin
139 140 Redmine::Plugin.mirror_assets(name)
140 141 rescue Redmine::PluginNotFound
141 142 abort "Plugin #{name} was not found."
142 143 end
143 144 end
144 145
145 146 desc 'Runs the plugins tests.'
146 147 task :test do
147 148 Rake::Task["redmine:plugins:test:units"].invoke
148 149 Rake::Task["redmine:plugins:test:functionals"].invoke
149 150 Rake::Task["redmine:plugins:test:integration"].invoke
150 151 end
151 152
152 153 namespace :test do
153 154 desc 'Runs the plugins unit tests.'
154 155 Rake::TestTask.new :units => "db:test:prepare" do |t|
155 156 t.libs << "test"
156 157 t.verbose = true
157 158 t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/unit/**/*_test.rb"
158 159 end
159 160
160 161 desc 'Runs the plugins functional tests.'
161 162 Rake::TestTask.new :functionals => "db:test:prepare" do |t|
162 163 t.libs << "test"
163 164 t.verbose = true
164 165 t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/functional/**/*_test.rb"
165 166 end
166 167
167 168 desc 'Runs the plugins integration tests.'
168 169 Rake::TestTask.new :integration => "db:test:prepare" do |t|
169 170 t.libs << "test"
170 171 t.verbose = true
171 172 t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/integration/**/*_test.rb"
172 173 end
173 174 end
174 175 end
175 176 end
176 177
177 178 # Load plugins' rake tasks
178 179 Dir[File.join(Rails.root, "plugins/*/lib/tasks/**/*.rake")].sort.each { |ext| load ext }
General Comments 0
You need to be logged in to leave comments. Login now