@@ -370,24 +370,41 module Redmine #:nodoc: | |||
|
370 | 370 | def migration_directory |
|
371 | 371 | File.join(Rails.root, 'plugins', id.to_s, 'db', 'migrate') |
|
372 | 372 | end |
|
373 | ||
|
373 | ||
|
374 | 374 | # Returns the version number of the latest migration for this plugin. Returns |
|
375 | 375 | # nil if this plugin has no migrations. |
|
376 | 376 | def latest_migration |
|
377 | 377 | migrations.last |
|
378 | 378 | end |
|
379 | ||
|
379 | ||
|
380 | 380 | # Returns the version numbers of all migrations for this plugin. |
|
381 | 381 | def migrations |
|
382 | 382 | migrations = Dir[migration_directory+"/*.rb"] |
|
383 | 383 | migrations.map { |p| File.basename(p).match(/0*(\d+)\_/)[1].to_i }.sort |
|
384 | 384 | end |
|
385 | ||
|
385 | ||
|
386 | 386 | # Migrate this plugin to the given version |
|
387 | 387 | def migrate(version = nil) |
|
388 | puts "Migrating #{id} (#{name})..." | |
|
388 | 389 | Redmine::Plugin::Migrator.migrate_plugin(self, version) |
|
389 | 390 | end |
|
390 | 391 | |
|
392 | # Migrates all plugins or a single plugin to a given version | |
|
393 | # Exemples: | |
|
394 | # Plugin.migrate | |
|
395 | # Plugin.migrate('sample_plugin') | |
|
396 | # Plugin.migrate('sample_plugin', 1) | |
|
397 | # | |
|
398 | def self.migrate(name=nil, version=nil) | |
|
399 | if name.present? | |
|
400 | find(name).migrate(version) | |
|
401 | else | |
|
402 | all.each do |plugin| | |
|
403 | plugin.migrate | |
|
404 | end | |
|
405 | end | |
|
406 | end | |
|
407 | ||
|
391 | 408 | class Migrator < ActiveRecord::Migrator |
|
392 | 409 | # We need to be able to set the 'current' plugin being migrated. |
|
393 | 410 | cattr_accessor :current_plugin |
@@ -8,3 +8,4 deprecated_task :load_default_data, "redmine:load_default_data" | |||
|
8 | 8 | deprecated_task :migrate_from_mantis, "redmine:migrate_from_mantis" |
|
9 | 9 | deprecated_task :migrate_from_trac, "redmine:migrate_from_trac" |
|
10 | 10 | deprecated_task "db:migrate_plugins", "redmine:plugins:migrate" |
|
11 | deprecated_task "db:migrate:plugin", "redmine:plugins:migrate" |
@@ -51,9 +51,24 namespace :redmine do | |||
|
51 | 51 | namespace :plugins do |
|
52 | 52 | desc 'Migrates installed plugins.' |
|
53 | 53 | task :migrate => :environment do |
|
54 | Redmine::Plugin.all.each do |plugin| | |
|
55 | puts "Migrating #{plugin.name}..." | |
|
56 | plugin.migrate | |
|
54 | name = ENV['name'] | |
|
55 | version = nil | |
|
56 | version_string = ENV['version'] | |
|
57 | if version_string | |
|
58 | if version_string =~ /^\d+$/ | |
|
59 | version = version_string.to_i | |
|
60 | if name.nil? | |
|
61 | abort "The VERSION argument requires a plugin NAME." | |
|
62 | end | |
|
63 | else | |
|
64 | abort "Invalid version #{version_string} given." | |
|
65 | end | |
|
66 | end | |
|
67 | ||
|
68 | begin | |
|
69 | Redmine::Plugin.migrate(name, version) | |
|
70 | rescue Redmine::PluginNotFound | |
|
71 | abort "Plugin #{name} was not found." | |
|
57 | 72 | end |
|
58 | 73 | end |
|
59 | 74 |
General Comments 0
You need to be logged in to leave comments.
Login now