From 9f2e91414f507a0516fde260996f3980702664c3 Mon Sep 17 00:00:00 2001 From: Brian Quinn Date: Wed, 8 Jun 2011 16:51:10 +0100 Subject: Ensure engine migrations are copied in the same sequence that they are required. --- activerecord/lib/active_record/railties/databases.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 6f8f84d50b..6ef24a4eaf 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -498,7 +498,7 @@ namespace :railties do # desc "Copies missing migrations from Railties (e.g. plugins, engines). You can specify Railties to use with FROM=railtie1,railtie2" task :migrations => :'db:load_config' do to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map {|n| n.strip } - railties = {} + railties = ActiveSupport::OrderedHash.new Rails.application.railties.all do |railtie| next unless to_load == :all || to_load.include?(railtie.railtie_name) -- cgit v1.2.3 From 25ad43015c3fc7694a4e6869e1d457b96160da28 Mon Sep 17 00:00:00 2001 From: Brian Quinn Date: Fri, 10 Jun 2011 11:03:28 +0100 Subject: Updated test to ensure correct sequence when copying engine/plugin migrations. --- railties/test/railties/shared_tests.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/railties/test/railties/shared_tests.rb b/railties/test/railties/shared_tests.rb index d8ea58166e..8cbc76db71 100644 --- a/railties/test/railties/shared_tests.rb +++ b/railties/test/railties/shared_tests.rb @@ -53,6 +53,9 @@ module RailtiesTest add_to_config "ActiveRecord::Base.timestamped_migrations = false" + boot_rails + railties = Rails.application.railties.all.map(&:railtie_name) + Dir.chdir(app_path) do output = `bundle exec rake bukkits:install:migrations` @@ -63,12 +66,16 @@ module RailtiesTest assert_match /NOTE: Migration 3_create_sessions.rb from bukkits has been skipped/, output assert_equal 3, Dir["#{app_path}/db/migrate/*.rb"].length - output = `bundle exec rake railties:install:migrations` + output = `bundle exec rake railties:install:migrations`.split("\n") assert File.exists?("#{app_path}/db/migrate/4_create_yaffles.rb") - assert_match /NOTE: Migration 3_create_sessions.rb from bukkits has been skipped/, output - assert_match /Copied migration 4_create_yaffles.rb from acts_as_yaffle/, output - assert_no_match /2_create_users/, output + assert_no_match /2_create_users/, output.join("\n") + + yaffle_migration_order = output.index(output.detect{|o| /Copied migration 4_create_yaffles.rb from acts_as_yaffle/ =~ o }) + bukkits_migration_order = output.index(output.detect{|o| /NOTE: Migration 3_create_sessions.rb from bukkits has been skipped/ =~ o }) + assert_not_nil yaffle_migration_order, "Expected migration to be copied" + assert_not_nil bukkits_migration_order, "Expected migration to be skipped" + assert_equal (railties.index('acts_as_yaffle') > railties.index('bukkits')) , (yaffle_migration_order > bukkits_migration_order) migrations_count = Dir["#{app_path}/db/migrate/*.rb"].length output = `bundle exec rake railties:install:migrations` -- cgit v1.2.3