diff --git a/config/initializers/0_duplicate_migrations.rb b/config/initializers/0_duplicate_migrations.rb deleted file mode 100644 index f993571877..0000000000 --- a/config/initializers/0_duplicate_migrations.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -# Some migrations have been present in glitch-soc for a long time and have then -# been merged in upstream Mastodon, under a different version number. -# -# This puts us in an uneasy situation in which if we remove upstream's -# migration file, people migrating from upstream will end up having a conflict -# with their already-ran migration. -# -# On the other hand, if we keep upstream's migration and remove our own, -# any current glitch-soc user will have a conflict during migration. -# -# For lack of a better solution, as those migrations are indeed identical, -# we decided monkey-patching Rails' Migrator to completely ignore the duplicate, -# keeping only the one that has run, or an arbitrary one. - -ALLOWED_DUPLICATES = [2018_04_10_220657, 2018_08_31_171112].freeze - -module ActiveRecord - class Migrator - def self.new(direction, migrations, schema_migration, internal_metadata, target_version = nil) - migrated = Set.new(Base.connection.migration_context.get_all_versions) - - migrations.group_by(&:name).each_value do |duplicates| - next unless duplicates.length > 1 && duplicates.all? { |m| ALLOWED_DUPLICATES.include?(m.version) } - - # We have a set of allowed duplicates. Keep the migrated one, if any. - non_migrated = duplicates.reject { |m| migrated.include?(m.version.to_i) } - - migrations = begin - if duplicates.length == non_migrated.length || non_migrated.empty? - # There weren't any migrated one, so we have to pick one “canonical” migration - migrations - duplicates[1..] - else - # Just reject every duplicate which hasn't been migrated yet - migrations - non_migrated - end - end - end - - super - end - end - - class MigrationContext - def needs_migration? - # A set of duplicated migrations is considered migrated if at least one of - # them is migrated. - migrated = get_all_versions - migrations.group_by(&:name).each_value do |duplicates| - return true unless duplicates.any? { |m| migrated.include?(m.version.to_i) } - end - false - end - end -end diff --git a/db/migrate/20180410220657_create_bookmarks.rb b/db/migrate/20180410220657_glitch_create_bookmarks.rb similarity index 70% rename from db/migrate/20180410220657_create_bookmarks.rb rename to db/migrate/20180410220657_glitch_create_bookmarks.rb index aba21f5eaa..5a2e0d35e5 100644 --- a/db/migrate/20180410220657_create_bookmarks.rb +++ b/db/migrate/20180410220657_glitch_create_bookmarks.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true -# This migration is a duplicate of 20180831171112 and may get ignored, see -# config/initializers/0_duplicate_migrations.rb +# This migration is a duplicate of 20180831171112 + +class GlitchCreateBookmarks < ActiveRecord::Migration[5.1] + def up + return if table_exists?(:bookmarks) -class CreateBookmarks < ActiveRecord::Migration[5.1] - def change create_table :bookmarks do |t| t.references :account, null: false t.references :status, null: false @@ -19,4 +20,6 @@ class CreateBookmarks < ActiveRecord::Migration[5.1] add_index :bookmarks, [:account_id, :status_id], unique: true end + + def down; end end diff --git a/db/migrate/20180831171112_create_bookmarks.rb b/db/migrate/20180831171112_create_bookmarks.rb index 4fa4c323d6..88fb75a597 100644 --- a/db/migrate/20180831171112_create_bookmarks.rb +++ b/db/migrate/20180831171112_create_bookmarks.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true -# This migration is a duplicate of 20180410220657 and may get ignored, see -# config/initializers/0_duplicate_migrations.rb +# This migration is a duplicate of 20180410220657 class CreateBookmarks < ActiveRecord::Migration[5.2] - def change + def up + return if table_exists?(:bookmarks) + create_table :bookmarks do |t| t.references :account, null: false t.references :status, null: false @@ -19,4 +20,8 @@ class CreateBookmarks < ActiveRecord::Migration[5.2] add_index :bookmarks, [:account_id, :status_id], unique: true end + + def down + drop_table :bookmarks + end end