]> source.dussan.org Git - redmine.git/commitdiff
Adds deprecated tasks for plugins migration.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 1 May 2012 09:02:34 +0000 (09:02 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 1 May 2012 09:02:34 +0000 (09:02 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9597 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/plugin.rb
lib/tasks/deprecated.rake
lib/tasks/redmine.rake

index 090deb53529f0fddc846436e9a046036594b91e2..24f921f533000ed806103718e2b06438579a7c25 100644 (file)
@@ -370,24 +370,41 @@ module Redmine #:nodoc:
     def migration_directory
       File.join(Rails.root, 'plugins', id.to_s, 'db', 'migrate')
     end
-  
+
     # Returns the version number of the latest migration for this plugin. Returns
     # nil if this plugin has no migrations.
     def latest_migration
       migrations.last
     end
-    
+
     # Returns the version numbers of all migrations for this plugin.
     def migrations
       migrations = Dir[migration_directory+"/*.rb"]
       migrations.map { |p| File.basename(p).match(/0*(\d+)\_/)[1].to_i }.sort
     end
-    
+
     # Migrate this plugin to the given version
     def migrate(version = nil)
+      puts "Migrating #{id} (#{name})..."
       Redmine::Plugin::Migrator.migrate_plugin(self, version)
     end
 
+    # Migrates all plugins or a single plugin to a given version
+    # Exemples:
+    #   Plugin.migrate
+    #   Plugin.migrate('sample_plugin')
+    #   Plugin.migrate('sample_plugin', 1)
+    #
+    def self.migrate(name=nil, version=nil)
+      if name.present?
+        find(name).migrate(version)
+      else
+        all.each do |plugin|
+          plugin.migrate
+        end
+      end
+    end
+
     class Migrator < ActiveRecord::Migrator
       # We need to be able to set the 'current' plugin being migrated.
       cattr_accessor :current_plugin
index 9b5549112bd25bc8026a43a94b30eca6e2515aa6..31ff727452c73d4479b8a893d5fac023f55cf917 100644 (file)
@@ -8,3 +8,4 @@ deprecated_task :load_default_data, "redmine:load_default_data"
 deprecated_task :migrate_from_mantis, "redmine:migrate_from_mantis"
 deprecated_task :migrate_from_trac, "redmine:migrate_from_trac"
 deprecated_task "db:migrate_plugins", "redmine:plugins:migrate"
+deprecated_task "db:migrate:plugin", "redmine:plugins:migrate"
index 2359c827a58141f58e482394e0c0a523ac9c8350..a75483af2169f59e04ba835c5db1d44a40844f2a 100644 (file)
@@ -51,9 +51,24 @@ namespace :redmine do
   namespace :plugins do
     desc 'Migrates installed plugins.'
     task :migrate => :environment do
-      Redmine::Plugin.all.each do |plugin|
-        puts "Migrating #{plugin.name}..."
-        plugin.migrate
+      name = ENV['name']
+      version = nil
+      version_string = ENV['version']
+      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
+          abort "Invalid version #{version_string} given."
+        end
+      end
+
+      begin
+        Redmine::Plugin.migrate(name, version)
+      rescue Redmine::PluginNotFound
+        abort "Plugin #{name} was not found."
       end
     end