Skip to content

Commit

Permalink
Give a nice message if there are duplicate migrations instead of rais…
Browse files Browse the repository at this point in the history
…ing a strange insert error
  • Loading branch information
jeremy committed Jun 4, 2008
1 parent 30a0ebb commit e660055
Showing 1 changed file with 14 additions and 3 deletions.
Expand Up @@ -331,15 +331,26 @@ def initialize_schema_migrations_table
end

def assume_migrated_upto_version(version)
version = version.to_i
sm_table = quote_table_name(ActiveRecord::Migrator.schema_migrations_table_name)

migrated = select_values("SELECT version FROM #{sm_table}").map(&:to_i)
versions = Dir['db/migrate/[0-9]*_*.rb'].map do |filename|
filename.split('/').last.split('_').first.to_i
end

execute "INSERT INTO #{sm_table} (version) VALUES ('#{version}')" unless migrated.include?(version.to_i)
(versions - migrated).select { |v| v < version.to_i }.each do |v|
execute "INSERT INTO #{sm_table} (version) VALUES ('#{v}')"
unless migrated.include?(version)
execute "INSERT INTO #{sm_table} (version) VALUES ('#{version}')"
end

inserted = Set.new
(versions - migrated).each do |v|
if inserted.include?(v)
raise "Duplicate migration #{v}. Please renumber your migrations to resolve the conflict."
elsif v < version
execute "INSERT INTO #{sm_table} (version) VALUES ('#{v}')"
inserted << v
end
end
end

Expand Down

0 comments on commit e660055

Please sign in to comment.