module ActiveRecord class Migration class << self def renumber(migrations_path, current_version, target_version) self.new(current_version > target_version ? :up : :down, migrations_path, target_version).renumber(current_version) end end end class Migrator#:nodoc: class << self def renumber(migrations_path, current_version, target_version) self.new(current_version > target_version ? :up : :down, migrations_path, target_version).renumber(current_version) end end def renumber(current_version) migration_files.each do |migration_file| version, name = migration_version_and_name(migration_file) if version.to_i >= current_version svn_status = `svn status -v #{migration_file}` move = (svn_status.blank? || svn_status =~ /^\?/) ? 'mv' : 'svn mv' new_version = version.to_i + (@target_version - current_version) new_filename = File.join(@migrations_path, "#{new_version}_#{name}.rb") system "#{move} #{migration_file} #{new_filename}" puts "== Migration Renumbered: Moving #{version}_#{name} to #{new_version}_#{name}" end end end end end