| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2022-01-02 05:29:10 +00:00
										 |  |  | # Copyright (C) 2006-2022  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2012-04-29 13:25:07 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							| 
									
										
										
										
											2012-04-29 13:25:07 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace :redmine do | 
					
						
							|  |  |  |   namespace :attachments do | 
					
						
							| 
									
										
										
										
											2012-04-15 15:56:58 +00:00
										 |  |  |     desc 'Removes uploaded files left unattached after one day.' | 
					
						
							| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  |     task :prune => :environment do | 
					
						
							|  |  |  |       Attachment.prune | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-12-13 12:07:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     desc 'Moves attachments stored at the root of the file directory (ie. created before Redmine 2.3) to their subdirectories' | 
					
						
							|  |  |  |     task :move_to_subdirectories => :environment do | 
					
						
							|  |  |  |       Attachment.move_from_root_to_target_directory | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-04-03 11:38:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     desc 'Updates attachment digests to SHA256' | 
					
						
							|  |  |  |     task :update_digests => :environment do | 
					
						
							|  |  |  |       Attachment.update_digests_to_sha256 | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-04-15 15:56:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   namespace :tokens do | 
					
						
							|  |  |  |     desc 'Removes expired tokens.' | 
					
						
							|  |  |  |     task :prune => :environment do | 
					
						
							|  |  |  |       Token.destroy_expired | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-04-15 15:57:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-22 04:02:39 +00:00
										 |  |  |   namespace :users do | 
					
						
							|  |  |  |     desc 'Removes registered users that have not been activated after a number of days. Use DAYS to set the number of days, defaults to 30 days.' | 
					
						
							|  |  |  |     task :prune => :environment do | 
					
						
							|  |  |  |       days = 30
 | 
					
						
							|  |  |  |       env_days = ENV['DAYS'] | 
					
						
							|  |  |  |       if env_days | 
					
						
							|  |  |  |         if env_days.to_i <= 0
 | 
					
						
							|  |  |  |           abort "Invalid DAYS #{env_days} given. The value must be a integer." | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           days = env_days.to_i | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       User.prune(days.days) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-15 15:57:35 +00:00
										 |  |  |   namespace :watchers do | 
					
						
							|  |  |  |     desc 'Removes watchers from what they can no longer view.' | 
					
						
							|  |  |  |     task :prune => :environment do | 
					
						
							|  |  |  |       Watcher.prune | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   desc 'Fetch changesets from the repositories' | 
					
						
							|  |  |  |   task :fetch_changesets => :environment do | 
					
						
							|  |  |  |     Repository.fetch_changesets | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   desc 'Migrates and copies plugins assets.' | 
					
						
							|  |  |  |   task :plugins do | 
					
						
							|  |  |  |     Rake::Task["redmine:plugins:migrate"].invoke | 
					
						
							|  |  |  |     Rake::Task["redmine:plugins:assets"].invoke | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-12 09:02:31 +00:00
										 |  |  | desc <<-DESC
 | 
					
						
							|  |  |  | FOR EXPERIMENTAL USE ONLY, Moves Redmine data from production database to the development database. | 
					
						
							|  |  |  | This task should only be used when you need to move data from one DBMS to a different one (eg. MySQL to PostgreSQL). | 
					
						
							|  |  |  | WARNING: All data in the development database is deleted. | 
					
						
							|  |  |  | DESC | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   task :migrate_dbms => :environment do | 
					
						
							| 
									
										
										
										
											2014-02-09 10:49:57 +00:00
										 |  |  |     ActiveRecord::Base.establish_connection :development | 
					
						
							|  |  |  |     target_tables = ActiveRecord::Base.connection.tables | 
					
						
							|  |  |  |     ActiveRecord::Base.remove_connection | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-12 09:02:31 +00:00
										 |  |  |     ActiveRecord::Base.establish_connection :production | 
					
						
							| 
									
										
										
										
											2014-02-09 10:49:57 +00:00
										 |  |  |     tables = ActiveRecord::Base.connection.tables.sort - %w(schema_migrations plugin_schema_info) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (tables - target_tables).any? | 
					
						
							| 
									
										
										
										
											2014-04-03 23:11:47 +00:00
										 |  |  |       list = (tables - target_tables).map {|table| "* #{table}"}.join("\n") | 
					
						
							|  |  |  |       abort "The following table(s) are missing from the target database:\n#{list}" | 
					
						
							| 
									
										
										
										
											2014-02-09 10:49:57 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-01-12 09:02:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 10:49:57 +00:00
										 |  |  |     tables.each do |table_name| | 
					
						
							| 
									
										
										
										
											2014-01-12 09:02:31 +00:00
										 |  |  |       Source = Class.new(ActiveRecord::Base) | 
					
						
							|  |  |  |       Target = Class.new(ActiveRecord::Base) | 
					
						
							|  |  |  |       Target.establish_connection(:development) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       [Source, Target].each do |klass| | 
					
						
							|  |  |  |         klass.table_name = table_name | 
					
						
							|  |  |  |         klass.reset_column_information | 
					
						
							|  |  |  |         klass.inheritance_column = "foo" | 
					
						
							|  |  |  |         klass.record_timestamps = false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       Target.primary_key = (Target.column_names.include?("id") ? "id" : nil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       source_count = Source.count | 
					
						
							|  |  |  |       puts "Migrating %6d records from #{table_name}..." % source_count | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Target.delete_all | 
					
						
							|  |  |  |       offset = 0
 | 
					
						
							|  |  |  |       while (objects = Source.offset(offset).limit(5000).order("1,2").to_a) && objects.any? | 
					
						
							|  |  |  |         offset += objects.size | 
					
						
							|  |  |  |         Target.transaction do | 
					
						
							|  |  |  |           objects.each do |object| | 
					
						
							|  |  |  |             new_object = Target.new(object.attributes) | 
					
						
							|  |  |  |             new_object.id = object.id if Target.primary_key | 
					
						
							|  |  |  |             new_object.save(:validate => false) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       Target.connection.reset_pk_sequence!(table_name) if Target.primary_key | 
					
						
							|  |  |  |       target_count = Target.count | 
					
						
							|  |  |  |       abort "Some records were not migrated" unless source_count == target_count | 
					
						
							| 
									
										
										
										
											2017-03-02 18:16:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       Object.send(:remove_const, :Target) | 
					
						
							|  |  |  |       Object.send(:remove_const, :Source) | 
					
						
							| 
									
										
										
										
											2014-01-12 09:02:31 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |   namespace :plugins do | 
					
						
							|  |  |  |     desc 'Migrates installed plugins.' | 
					
						
							|  |  |  |     task :migrate => :environment do | 
					
						
							| 
									
										
										
										
											2012-05-06 21:03:30 +00:00
										 |  |  |       name = ENV['NAME'] | 
					
						
							| 
									
										
										
										
											2012-05-01 09:02:34 +00:00
										 |  |  |       version = nil | 
					
						
							| 
									
										
										
										
											2012-05-06 21:03:30 +00:00
										 |  |  |       version_string = ENV['VERSION'] | 
					
						
							| 
									
										
										
										
											2012-05-01 09:02:34 +00:00
										 |  |  |       if version_string | 
					
						
							|  |  |  |         if version_string =~ /^\d+$/ | 
					
						
							|  |  |  |           version = version_string.to_i | 
					
						
							|  |  |  |           if name.nil? | 
					
						
							|  |  |  |             abort "The VERSION argument requires a plugin NAME." | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         else | 
					
						
							| 
									
										
										
										
											2012-05-06 21:03:30 +00:00
										 |  |  |           abort "Invalid VERSION #{version_string} given." | 
					
						
							| 
									
										
										
										
											2012-05-01 09:02:34 +00:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       begin | 
					
						
							|  |  |  |         Redmine::Plugin.migrate(name, version) | 
					
						
							|  |  |  |       rescue Redmine::PluginNotFound | 
					
						
							|  |  |  |         abort "Plugin #{name} was not found." | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-07-29 18:01:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-01 09:34:29 +00:00
										 |  |  |       case ActiveRecord::Base.schema_format | 
					
						
							|  |  |  |       when :ruby | 
					
						
							|  |  |  |         Rake::Task["db:schema:dump"].invoke | 
					
						
							|  |  |  |       when :sql | 
					
						
							|  |  |  |         Rake::Task["db:structure:dump"].invoke | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     desc 'Copies plugins assets into the public directory.' | 
					
						
							|  |  |  |     task :assets => :environment do | 
					
						
							| 
									
										
										
										
											2012-05-06 21:03:30 +00:00
										 |  |  |       name = ENV['NAME'] | 
					
						
							| 
									
										
										
										
											2012-05-01 10:25:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       begin | 
					
						
							| 
									
										
										
										
											2021-12-08 01:23:51 +00:00
										 |  |  |         Redmine::PluginLoader.mirror_assets(name) | 
					
						
							| 
									
										
										
										
											2012-05-01 10:25:22 +00:00
										 |  |  |       rescue Redmine::PluginNotFound | 
					
						
							|  |  |  |         abort "Plugin #{name} was not found." | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-05-28 10:02:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     desc 'Runs the plugins tests.' | 
					
						
							|  |  |  |     task :test do | 
					
						
							|  |  |  |       Rake::Task["redmine:plugins:test:units"].invoke | 
					
						
							|  |  |  |       Rake::Task["redmine:plugins:test:functionals"].invoke | 
					
						
							|  |  |  |       Rake::Task["redmine:plugins:test:integration"].invoke | 
					
						
							| 
									
										
										
										
											2019-08-05 22:04:03 +00:00
										 |  |  |       Rake::Task["redmine:plugins:test:system"].invoke | 
					
						
							| 
									
										
										
										
											2012-05-28 10:02:24 +00:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     namespace :test do | 
					
						
							|  |  |  |       desc 'Runs the plugins unit tests.' | 
					
						
							| 
									
										
										
										
											2017-07-23 11:26:04 +00:00
										 |  |  |       task :units => "db:test:prepare" do |t| | 
					
						
							|  |  |  |         $: << "test" | 
					
						
							| 
									
										
										
										
											2018-01-01 10:28:56 +00:00
										 |  |  |         Rails::TestUnit::Runner.rake_run ["plugins/#{ENV['NAME'] || '*'}/test/unit/**/*_test.rb"] | 
					
						
							| 
									
										
										
										
											2012-05-28 10:02:24 +00:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       desc 'Runs the plugins functional tests.' | 
					
						
							| 
									
										
										
										
											2017-07-23 11:26:04 +00:00
										 |  |  |       task :functionals => "db:test:prepare" do |t| | 
					
						
							|  |  |  |         $: << "test" | 
					
						
							| 
									
										
										
										
											2018-01-01 10:28:56 +00:00
										 |  |  |         Rails::TestUnit::Runner.rake_run ["plugins/#{ENV['NAME'] || '*'}/test/functional/**/*_test.rb"] | 
					
						
							| 
									
										
										
										
											2012-05-28 10:02:24 +00:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       desc 'Runs the plugins integration tests.' | 
					
						
							| 
									
										
										
										
											2017-07-23 11:26:04 +00:00
										 |  |  |       task :integration => "db:test:prepare" do |t| | 
					
						
							|  |  |  |         $: << "test" | 
					
						
							| 
									
										
										
										
											2018-01-01 10:28:56 +00:00
										 |  |  |         Rails::TestUnit::Runner.rake_run ["plugins/#{ENV['NAME'] || '*'}/test/integration/**/*_test.rb"] | 
					
						
							| 
									
										
										
										
											2012-05-28 10:02:24 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-11-27 12:30:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-05 22:04:03 +00:00
										 |  |  |       desc 'Runs the plugins system tests.' | 
					
						
							|  |  |  |       task :system => "db:test:prepare" do |t| | 
					
						
							|  |  |  |         $: << "test" | 
					
						
							|  |  |  |         Rails::TestUnit::Runner.rake_run ["plugins/#{ENV['NAME'] || '*'}/test/system/**/*_test.rb"] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-27 12:30:57 +00:00
										 |  |  |       desc 'Runs the plugins ui tests.' | 
					
						
							| 
									
										
										
										
											2017-07-23 11:26:04 +00:00
										 |  |  |       task :ui => "db:test:prepare" do |t| | 
					
						
							|  |  |  |         $: << "test" | 
					
						
							| 
									
										
										
										
											2018-01-01 10:28:56 +00:00
										 |  |  |         Rails::TestUnit::Runner.rake_run ["plugins/#{ENV['NAME'] || '*'}/test/ui/**/*_test.rb"] | 
					
						
							| 
									
										
										
										
											2015-11-27 12:30:57 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-05-28 10:02:24 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-02-16 21:18:01 +00:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2012-05-02 16:30:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Load plugins' rake tasks | 
					
						
							|  |  |  | Dir[File.join(Rails.root, "plugins/*/lib/tasks/**/*.rake")].sort.each { |ext| load ext } |