1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fix copying migrations from engines

There was a bug in ActiveRecord::Migration.copy method, which
prevented adding special comment about the origin of migration.

Because of that, the check if migration is identical or if it's
not and should be skipped was always saying that migration is
skipped, which was causing additional useless warnings about
skipped migrations.
This commit is contained in:
Piotr Sarnacki 2011-12-09 00:50:39 +01:00
parent 2c471b3ac8
commit 652db2fc3e
2 changed files with 24 additions and 3 deletions

View file

@ -461,11 +461,11 @@ module ActiveRecord
source_migrations = ActiveRecord::Migrator.migrations(path) source_migrations = ActiveRecord::Migrator.migrations(path)
source_migrations.each do |migration| source_migrations.each do |migration|
source = File.read(migration.filename) source = File.read(migration.filename).chomp
source = "# This migration comes from #{name} (originally #{migration.version})\n#{source}" source = "# This migration comes from #{name} (originally #{migration.version})\n#{source}"
if duplicate = destination_migrations.detect { |m| m.name == migration.name } if duplicate = destination_migrations.detect { |m| m.name == migration.name }
options[:on_skip].call(name, migration) if File.read(duplicate.filename) != source && options[:on_skip] options[:on_skip].call(name, migration) if File.read(duplicate.filename).chomp != source && options[:on_skip]
next next
end end
@ -474,7 +474,7 @@ module ActiveRecord
old_path, migration.filename = migration.filename, new_path old_path, migration.filename = migration.filename, new_path
last = migration last = migration
FileUtils.cp(old_path, migration.filename) File.open(migration.filename, "w") { |f| f.write source }
copied << migration copied << migration
options[:on_copy].call(name, migration, old_path) if options[:on_copy] options[:on_copy].call(name, migration, old_path) if options[:on_copy]
destination_migrations << migration destination_migrations << migration

View file

@ -2103,6 +2103,9 @@ if ActiveRecord::Base.connection.supports_migrations?
assert File.exists?(@migrations_path + "/5_people_have_descriptions.rb") assert File.exists?(@migrations_path + "/5_people_have_descriptions.rb")
assert_equal [@migrations_path + "/4_people_have_hobbies.rb", @migrations_path + "/5_people_have_descriptions.rb"], copied.map(&:filename) assert_equal [@migrations_path + "/4_people_have_hobbies.rb", @migrations_path + "/5_people_have_descriptions.rb"], copied.map(&:filename)
expected = "# This migration comes from bukkits (originally 1)"
assert_equal expected, IO.readlines(@migrations_path + "/4_people_have_hobbies.rb")[0].chomp
files_count = Dir[@migrations_path + "/*.rb"].length files_count = Dir[@migrations_path + "/*.rb"].length
copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy"}) copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy"})
assert_equal files_count, Dir[@migrations_path + "/*.rb"].length assert_equal files_count, Dir[@migrations_path + "/*.rb"].length
@ -2213,6 +2216,24 @@ if ActiveRecord::Base.connection.supports_migrations?
clear clear
end end
def test_skip_is_not_called_if_migrations_are_identical
@migrations_path = MIGRATIONS_ROOT + "/valid_with_timestamps"
@existing_migrations = Dir[@migrations_path + "/*.rb"]
sources = ActiveSupport::OrderedHash.new
sources[:bukkits] = MIGRATIONS_ROOT + "/to_copy_with_timestamps"
skipped = []
on_skip = Proc.new { |name, migration| skipped << "#{name} #{migration.name}" }
copied = ActiveRecord::Migration.copy(@migrations_path, sources, :on_skip => on_skip)
ActiveRecord::Migration.copy(@migrations_path, sources, :on_skip => on_skip)
assert_equal 2, copied.length
assert_equal 0, skipped.length
ensure
clear
end
def test_copying_migrations_to_non_existing_directory def test_copying_migrations_to_non_existing_directory
@migrations_path = MIGRATIONS_ROOT + "/non_existing" @migrations_path = MIGRATIONS_ROOT + "/non_existing"
@existing_migrations = [] @existing_migrations = []