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( |