From c3d48da9d51ad34ff2ededc009355f38dee1d96c Mon Sep 17 00:00:00 2001 From: Phil Smith Date: Thu, 15 Apr 2010 22:31:15 -0700 Subject: [PATCH] Timestamp migration numbers respect existing numbers. [#4412 state:resolved] They are the max of the current timestamp and the next migration number, given by #current_migration_number(dirname) + 1. --- activerecord/lib/rails/generators/active_record.rb | 5 +++-- .../test/generators/migration_generator_test.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/rails/generators/active_record.rb b/activerecord/lib/rails/generators/active_record.rb index 1ca838b..d2b1e86 100644 --- a/activerecord/lib/rails/generators/active_record.rb +++ b/activerecord/lib/rails/generators/active_record.rb @@ -19,10 +19,11 @@ module ActiveRecord # Implement the required interface for Rails::Generators::Migration. # def self.next_migration_number(dirname) #:nodoc: + next_migration_number = current_migration_number(dirname) + 1 if ActiveRecord::Base.timestamped_migrations - Time.now.utc.strftime("%Y%m%d%H%M%S") + [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max else - "%.3d" % (current_migration_number(dirname) + 1) + "%.3d" % next_migration_number end end end diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb index 762f84d..6ea722e 100644 --- a/railties/test/generators/migration_generator_test.rb +++ b/railties/test/generators/migration_generator_test.rb @@ -10,6 +10,19 @@ class MigrationGeneratorTest < Rails::Generators::TestCase assert_migration "db/migrate/#{migration}.rb", /class ChangeTitleBodyFromPosts < ActiveRecord::Migration/ end + def test_migrations_generated_simultaneously + migrations = ["change_title_body_from_posts", "change_email_from_comments"] + + first_migration_number, second_migration_number = migrations.collect do |migration| + run_generator [migration] + file_name = migration_file_name "db/migrate/#{migration}.rb" + + File.basename(file_name).split('_').first + end + + assert_not_equal first_migration_number, second_migration_number + end + def test_migration_with_class_name migration = "ChangeTitleBodyFromPosts" run_generator [migration] -- 1.6.6