# frozen_string_literal: true # rubocop:disable all namespace :dangerous do task :back_upstream do require './config/environment' prompt = TTY::Prompt.new unless ENV['BACK_UPSTREAM_FORCE'] exit(0) unless prompt.yes?('[1/3] Do you really want to go back to the original Mastodon?', default: false) exit(0) unless prompt.yes?('[2/3] All proprietary data of kmyblue will be deleted and cannot be restored. Are you sure?', default: false) exit(0) unless prompt.yes?('[3/3] This operation is irreversible. You have backups in case this operation causes a system malfunction, do you not?', default: false) end target_migrations = %w( 20231022074913 20231021005339 20230314120530 20240109035435 20231214225249 20231212225737 20231130083634 20231130031209 20231115001356 20231105225839 20231028005948 20231028004612 20231023083359 20231009235215 20231007090808 20231006030102 20231005074832 20231001050733 20231001031337 20230930233930 20230923103430 20230919232836 20230911022527 20230826023400 20230821061713 20230819084858 20230812130612 20230812083752 20230804222017 20230714004824 20230706031715 20230705232953 20230522093135 20230522082252 20230521122642 20230514030455 20230512122757 20230510033040 20230510004621 20230510000439 20230509045358 20230430110057 20230428111230 20230427233749 20230427122753 20230427072650 20230427022606 20230426013738 20230423233429 20230423002728 20230420081634 20230414010523 20230412073021 20230412005311 20230410004651 20230406041523 20230405121625 20230405121613 20230320234918 20230314121142 20230314081013 20230314021909 20230308061833 20230223102416 20230222232121 20240117021025 20240117022353 20240121231131 20240212224800 20240212230358 20240216042730 20240217022038 20240217093511 20240217230006 20240218233621 20240227033337 20240227222450 20240227225017 20240229233617 20240312230204 20240320231633 20240326231854 20240327234026 20240401222541 ) # Removed: account_groups target_tables = %w( antennas antenna_accounts antenna_domains antenna_tags bookmark_categories bookmark_category_statuses circles circle_accounts circle_statuses emoji_reactions friend_domains instance_infos list_statuses ng_rules ng_rule_histories ngword_histories ng_words pending_follow_requests pending_statuses scheduled_expiration_statuses sensitive_words specified_domains status_capability_tokens status_references ) target_table_columns = [ # Removed: accounts dissubscribable # Removed: accounts group_allow_private_message # Removed: accounts group_message_following_only %w(accounts master_settings), %w(accounts remote_pending), %w(accounts searchability), %w(accounts settings), # Removed: accounts stop_emoji_reaction_streaming # Removed: account_stats group_activitypub_count %w(account_statuses_cleanup_policies keep_self_emoji), %w(account_statuses_cleanup_policies min_emojis), %w(conversations ancestor_status_id), %w(conversations inbox_url), %w(custom_emojis aliases), %w(custom_emojis image_height), %w(custom_emojis image_width), %w(custom_emojis is_sensitive), %w(custom_emojis license), %w(custom_filters exclude_follows), %w(custom_filters exclude_localusers), %w(custom_filters with_quote), %w(domain_blocks block_trends), %w(domain_blocks detect_invalid_subscription), %w(domain_blocks hidden), # Removed: domain_blocks hidden_anonymous %w(domain_blocks reject_favourite), %w(domain_blocks reject_friend), %w(domain_blocks reject_hashtag), %w(domain_blocks reject_new_follow), # Removed: domain_blocks reject_reply %w(domain_blocks reject_reply_exclude_followers), # Removed: domain_blocks reject_send_dissubscribable # Removed: domain_blocks reject_send_media # Removed: domain_blocks reject_send_not_public_searchability # Removed: domain_blocks reject_send_public_unlisted # Removed: domain_blocks reject_send_unlisted_dissubscribable %w(domain_blocks reject_send_sensitive), %w(domain_blocks reject_straight_follow), %w(favourites uri), %w(lists notify), %w(statuses limited_scope), %w(statuses markdown), %w(statuses quote_of_id), %w(statuses searchability), %w(status_edits markdown), %w(status_stats emoji_reactions), %w(status_stats emoji_reactions_count), %w(status_stats emoji_reaction_accounts_count), %w(status_stats status_referred_by_count), # Removed: status_stats test ] target_indices = %w( index_statuses_on_url index_statuses_on_conversation_id index_preview_cards_vacuum index_media_attachments_vacuum ) prompt.say 'Processing...' ActiveRecord::Base.connection.execute('UPDATE statuses SET visibility = 1 WHERE visibility IN (10, 11)') ActiveRecord::Base.connection.execute('UPDATE custom_filters SET action = 0 WHERE action = 2') ActiveRecord::Base.connection.execute('UPDATE account_warnings SET action = 1250 WHERE action = 1200') ActiveRecord::Base.connection.execute('CREATE INDEX IF NOT EXISTS index_statuses_local_20190824 ON statuses USING btree (id DESC, account_id) WHERE (local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))') ActiveRecord::Base.connection.execute('CREATE INDEX IF NOT EXISTS index_statuses_public_20200119 ON statuses USING btree (id DESC, account_id) WHERE deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))') ActiveRecord::Base.connection.execute('DROP INDEX IF EXISTS index_statuses_local_20231213') ActiveRecord::Base.connection.execute('DROP INDEX IF EXISTS index_statuses_public_20231213') ActiveRecord::Base.connection.execute('ALTER TABLE ONLY custom_filter_keywords ALTER COLUMN whole_word SET DEFAULT true') prompt.ok 'Proceed' prompt.say 'Removing migration histories...' ActiveRecord::Base.connection.execute("DELETE FROM schema_migrations WHERE version IN ('#{target_migrations.join("','")}')") prompt.ok 'Removed' prompt.say 'Removing tables...' target_tables.each do |table_name| ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{table_name} CASCADE") end prompt.ok 'Removed' prompt.say 'Removing table columns...' target_table_columns.each do |table_name, column_name| ActiveRecord::Base.connection.execute("ALTER TABLE #{table_name} DROP COLUMN IF EXISTS #{column_name}") end prompt.ok 'Removed' prompt.say 'Removing indices...' target_indices.each do |index_name| ActiveRecord::Base.connection.execute("DROP INDEX IF EXISTS #{index_name}") end prompt.ok 'Removed' prompt.ok 'Done!' prompt.say "\n" prompt.ok 'Thanks for using kmyblue. Good bye!' end end # rubocop:enable all