diff options
author | schneems <richard.schneeman@gmail.com> | 2017-01-06 13:30:42 -0600 |
---|---|---|
committer | schneems <richard.schneeman@gmail.com> | 2017-01-06 13:30:42 -0600 |
commit | 93ee268ef40b052497daf22f124fc1535acabd64 (patch) | |
tree | b76ce1819cf2bedfdd3e10f73d0a23837d708f23 | |
parent | 98c6e4e56ca2a8f9f987e12815f7cdf66e5f1485 (diff) | |
download | rails-93ee268ef40b052497daf22f124fc1535acabd64.tar.gz rails-93ee268ef40b052497daf22f124fc1535acabd64.tar.bz2 rails-93ee268ef40b052497daf22f124fc1535acabd64.zip |
Preserve `up` and `down` return type
In Rails 4.2 calling `ActiveRecord::Migrator.migrate` would return an array of results. Without realizing that this return type was expected I accidentally introduced a change in https://github.com/rails/rails/commit/4d60e93174a3d6d90b1a06fc7515cb5cd749a6f3
This PR preserves the previous behavior and adds a test on the return type. This will need a backport to 5.0 branch.
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/migrator_test.rb | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index ed0c81b639..6e5f5fa2a7 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -1170,9 +1170,10 @@ module ActiveRecord def run_without_lock migration = migrations.detect { |m| m.version == @target_version } raise UnknownMigrationVersionError.new(@target_version) if migration.nil? - execute_migration_in_transaction(migration, @direction) + result = execute_migration_in_transaction(migration, @direction) record_environment + result end # Used for running multiple migrations up to or down to a certain value. @@ -1181,11 +1182,12 @@ module ActiveRecord raise UnknownMigrationVersionError.new(@target_version) end - runnable.each do |migration| + result = runnable.each do |migration| execute_migration_in_transaction(migration, @direction) end record_environment + result end # Stores the current environment in the database. diff --git a/activerecord/test/cases/migrator_test.rb b/activerecord/test/cases/migrator_test.rb index bb9835394b..cb44c443c7 100644 --- a/activerecord/test/cases/migrator_test.rb +++ b/activerecord/test/cases/migrator_test.rb @@ -290,6 +290,20 @@ class MigratorTest < ActiveRecord::TestCase assert_equal [[:up, 1], [:up, 2], [:up, 3]], calls end + def test_migrator_output + _, migrator = migrator_class(3) + + result = migrator.migrate("valid") + assert_equal(3, result.count) + + # Nothing migrated from duplicate run + result = migrator.migrate("valid") + assert_equal(0, result.count) + + result = migrator.rollback("valid") + assert_equal(1, result.count) + end + def test_migrator_rollback _, migrator = migrator_class(3) |