Patch #14971 » redmine_plugin_rollback_RMV2.3.2.diff
| lib/tasks/redmine.rake (copie de travail) | ||
|---|---|---|
| 79 | 79 | Rake::Task["db:schema:dump"].invoke | 
| 80 | 80 | end | 
| 81 | 81 | |
| 82 | desc 'Rollbacks installed plugins by 1 or many steps.' | |
| 83 | task :rollback => :environment do | |
| 84 | name = ENV['NAME'] | |
| 85 | steps = nil | |
| 86 | steps_string = ENV['STEP'] | |
| 87 | ||
| 88 | if name.nil? | |
| 89 | abort "The VERSION argument requires a plugin NAME." | |
| 90 | end | |
| 91 | ||
| 92 | begin | |
| 93 | steps = Integer(steps_string) | |
| 94 | rescue | |
| 95 |         abort "Invalid STEP #{steps_string} given." | |
| 96 | end | |
| 97 | ||
| 98 | begin | |
| 99 | Redmine::Plugin.rollback(name, steps) | |
| 100 | rescue Redmine::PluginNotFound | |
| 101 |         abort "Plugin #{name} was not found." | |
| 102 | end | |
| 103 | ||
| 104 | Rake::Task["db:schema:dump"].invoke | |
| 105 | end | |
| 106 | ||
| 82 | 107 | desc 'Copies plugins assets into the public directory.' | 
| 83 | 108 | task :assets => :environment do | 
| 84 | 109 | name = ENV['NAME'] | 
| lib/redmine/plugin.rb (copie de travail) | ||
|---|---|---|
| 425 | 425 | Redmine::Plugin::Migrator.migrate_plugin(self, version) | 
| 426 | 426 | end | 
| 427 | 427 | |
| 428 | # Rollback this plugin to the previous version | |
| 429 | def rollback(steps=1) | |
| 430 |       puts "Rollback #{steps} migration#{ '(s)' if steps > 1 } before (#{name})..." | |
| 431 | Redmine::Plugin::Migrator.rollback_plugin(self, steps) | |
| 432 | end | |
| 433 | ||
| 428 | 434 | # Migrates all plugins or a single plugin to a given version | 
| 429 | 435 | # Exemples: | 
| 430 | 436 | # Plugin.migrate | 
| ... | ... | |
| 441 | 447 | end | 
| 442 | 448 | end | 
| 443 | 449 | |
| 450 | # Rollbacks a single plugin by one or more step | |
| 451 | # Exemples: | |
| 452 |     #   Plugin.rollback('sample_plugin') | |
| 453 |     #   Plugin.rollback('sample_plugin', 2) | |
| 454 | # | |
| 455 | def self.rollback(name=nil, steps=nil) | |
| 456 | if name.present? | |
| 457 | find(name).rollback(steps) | |
| 458 | end | |
| 459 | end | |
| 460 | ||
| 444 | 461 | class Migrator < ActiveRecord::Migrator | 
| 445 | 462 | # We need to be able to set the 'current' plugin being migrated. | 
| 446 | 463 | cattr_accessor :current_plugin | 
| ... | ... | |
| 452 | 469 | return if current_version(plugin) == version | 
| 453 | 470 | migrate(plugin.migration_directory, version) | 
| 454 | 471 | end | 
| 455 |  | |
| 472 | ||
| 473 | def rollback_plugin(plugin, steps=1) | |
| 474 | self.current_plugin = plugin | |
| 475 | rollback(plugin.migration_directory, steps) | |
| 476 | end | |
| 477 | ||
| 456 | 478 | def current_version(plugin=current_plugin) | 
| 457 | 479 | # Delete migrations that don't match .. to_i will work because the number comes first | 
| 458 | 480 | ::ActiveRecord::Base.connection.select_values( |