Merge branch 'main' into glitch-soc/merge-upstream

Conflicts:
- `README.md`:
  Upstream added a link to the roadmap, but we have a completely different README.
  Kept ours.
- `app/models/media_attachment.rb`:
  Upstream upped media attachment limits.
  Updated the default according to upstream's.
- `db/migrate/20180831171112_create_bookmarks.rb`:
  Upstream changed the migration compatibility level.
  Did so too.
- `config/initializers/content_security_policy.rb`:
  Upstream refactored this file but we have a different version.
  Kept our version.
- `app/controllers/settings/preferences_controller.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  The file does not directly references individual settings anymore.
  Applied upstream changes.
- `app/lib/user_settings_decorator.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  The file got removed entirely.
  Removed it as well.
- `app/models/user.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  References to individual settings have been removed from the file.
  Removed them as well.
- `app/views/settings/preferences/appearance/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `app/views/settings/preferences/notifications/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `app/views/settings/preferences/other/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `config/settings.yml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  In particular, upstream removed user-specific and unused settings.
  Did the same in glitch-soc.
- `spec/controllers/application_controller_spec.rb`:
  Conflicts due to glitch-soc's theming system.
  Mostly kept our version, as upstream messed up the tests.
This commit is contained in:
Claire
2023-03-31 21:30:27 +02:00
341 changed files with 4055 additions and 2756 deletions
+8 -18
View File
@@ -1,7 +1,9 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
require_relative '../../lib/mastodon/migration_helpers'
require_relative '../../lib/mastodon/migration_warning'
class IdsToBigints < ActiveRecord::Migration[5.1]
include Mastodon::MigrationHelpers
include Mastodon::MigrationWarning
disable_ddl_transaction!
@@ -69,24 +71,12 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
]
included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)
# Print out a warning that this will probably take a while.
if $stdout.isatty
say ''
say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run'
say 'for a very long time. We will pause for 10 seconds to allow you to'
say 'interrupt this migration if you are not ready.'
say ''
say 'This migration has some sections that can be safely interrupted'
say 'and restarted later, and will tell you when those are occurring.'
say ''
say 'For more information, see https://github.com/mastodon/mastodon/pull/5088'
migration_duration_warning(<<~EXPLANATION)
This migration has some sections that can be safely interrupted
and restarted later, and will tell you when those are occurring.
10.downto(1) do |i|
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1
end
end
For more information, see https://github.com/mastodon/mastodon/pull/5088
EXPLANATION
tables = included_columns.map(&:first).uniq
table_sizes = {}
@@ -1,4 +1,4 @@
class AddDescriptionToMediaAttachments < ActiveRecord::Migration[5.1]
class AddDescriptionToMediaAttachments < ActiveRecord::Migration[5.2]
def change
add_column :media_attachments, :description, :text
end
@@ -1,4 +1,4 @@
class CreateEmailDomainBlocks < ActiveRecord::Migration[5.1]
class CreateEmailDomainBlocks < ActiveRecord::Migration[5.2]
def change
create_table :email_domain_blocks do |t|
t.string :domain, null: false
@@ -1,4 +1,4 @@
class CreateAccountModerationNotes < ActiveRecord::Migration[5.1]
class CreateAccountModerationNotes < ActiveRecord::Migration[5.2]
def change
create_table :account_moderation_notes do |t|
t.text :content, null: false
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddDisabledToCustomEmojis < ActiveRecord::Migration[5.1]
class AddDisabledToCustomEmojis < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,4 +1,4 @@
class AddUriToCustomEmojis < ActiveRecord::Migration[5.1]
class AddUriToCustomEmojis < ActiveRecord::Migration[5.2]
def change
add_column :custom_emojis, :uri, :string
add_column :custom_emojis, :image_remote_url, :string
@@ -1,4 +1,4 @@
class AddForeignKeyToAccountModerationNotes < ActiveRecord::Migration[5.1]
class AddForeignKeyToAccountModerationNotes < ActiveRecord::Migration[5.2]
def change
safety_assured { add_foreign_key :account_moderation_notes, :accounts }
end
@@ -1,4 +1,4 @@
class ChangeAccountsNonnullableInAccountModerationNotes < ActiveRecord::Migration[5.1]
class ChangeAccountsNonnullableInAccountModerationNotes < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :account_moderation_notes, :account_id, false
@@ -1,4 +1,4 @@
class AddVisibleInPickerToCustomEmoji < ActiveRecord::Migration[5.1]
class AddVisibleInPickerToCustomEmoji < ActiveRecord::Migration[5.2]
def change
safety_assured do
add_column :custom_emojis, :visible_in_picker, :boolean, default: true, null: false
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddReblogsToFollows < ActiveRecord::Migration[5.1]
class AddReblogsToFollows < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddMemorialToAccounts < ActiveRecord::Migration[5.1]
class AddMemorialToAccounts < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddDisabledToUsers < ActiveRecord::Migration[5.1]
class AddDisabledToUsers < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddModeratorToAccounts < ActiveRecord::Migration[5.1]
class AddModeratorToAccounts < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,4 +1,4 @@
class AddIndexDomainToEmailDomainBlocks < ActiveRecord::Migration[5.1]
class AddIndexDomainToEmailDomainBlocks < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
+1 -1
View File
@@ -1,4 +1,4 @@
class CreateLists < ActiveRecord::Migration[5.1]
class CreateLists < ActiveRecord::Migration[5.2]
def change
create_table :lists do |t|
t.references :account, foreign_key: { on_delete: :cascade }
@@ -1,4 +1,4 @@
class CreateListAccounts < ActiveRecord::Migration[5.1]
class CreateListAccounts < ActiveRecord::Migration[5.2]
def change
create_table :list_accounts do |t|
t.belongs_to :list, foreign_key: { on_delete: :cascade }, null: false
@@ -1,4 +1,4 @@
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.1]
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.2]
def change
add_column :accounts, :moved_to_account_id, :bigint, null: true, default: nil
safety_assured { add_foreign_key :accounts, :accounts, column: :moved_to_account_id, on_delete: :nullify }
@@ -1,4 +1,4 @@
class CreateAdminActionLogs < ActiveRecord::Migration[5.1]
class CreateAdminActionLogs < ActiveRecord::Migration[5.2]
def change
create_table :admin_action_logs do |t|
t.belongs_to :account, foreign_key: { on_delete: :cascade }
@@ -1,4 +1,4 @@
class AddIndexAccountAndReblogOfIdToStatuses < ActiveRecord::Migration[5.1]
class AddIndexAccountAndReblogOfIdToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
+1 -1
View File
@@ -1,4 +1,4 @@
class CreateInvites < ActiveRecord::Migration[5.1]
class CreateInvites < ActiveRecord::Migration[5.2]
def change
create_table :invites do |t|
t.belongs_to :user, foreign_key: { on_delete: :cascade }
@@ -1,4 +1,4 @@
class AddInviteIdToUsers < ActiveRecord::Migration[5.1]
class AddInviteIdToUsers < ActiveRecord::Migration[5.2]
def change
safety_assured { add_reference :users, :invite, null: true, default: nil, foreign_key: { on_delete: :nullify }, index: false }
end
@@ -1,4 +1,4 @@
class AddIndexReblogOfIdAndAccountToStatuses < ActiveRecord::Migration[5.1]
class AddIndexReblogOfIdAndAccountToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
@@ -1,4 +1,4 @@
class RemoveOldReblogIndexOnStatuses < ActiveRecord::Migration[5.1]
class RemoveOldReblogIndexOnStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
@@ -1,4 +1,4 @@
class AddIndexOnStreamEntries < ActiveRecord::Migration[5.1]
class AddIndexOnStreamEntries < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddEmbedURLToPreviewCards < ActiveRecord::Migration[5.1]
class AddEmbedURLToPreviewCards < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,4 +1,4 @@
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.1]
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :lists, :account_id, false
@@ -1,4 +1,4 @@
class RemoveDuplicateIndexesInLists < ActiveRecord::Migration[5.1]
class RemoveDuplicateIndexesInLists < ActiveRecord::Migration[5.2]
def change
remove_index :list_accounts, name: 'index_list_accounts_on_account_id'
remove_index :list_accounts, name: 'index_list_accounts_on_list_id'
@@ -1,4 +1,4 @@
class MoreFasterIndexOnNotifications < ActiveRecord::Migration[5.1]
class MoreFasterIndexOnNotifications < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
@@ -1,4 +1,4 @@
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
@@ -1,4 +1,4 @@
class AddRememberTokenToUsers < ActiveRecord::Migration[5.1]
class AddRememberTokenToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :remember_token, :string, null: true
end
@@ -1,7 +1,7 @@
class CreateIdentities < ActiveRecord::Migration[5.0]
class CreateIdentities < ActiveRecord::Migration[5.2]
def change
create_table :identities do |t|
t.references :user, foreign_key: { on_delete: :cascade }
create_table :identities, id: :integer do |t|
t.references :user, type: :integer, foreign_key: { on_delete: :cascade }
t.string :provider, null: false, default: ''
t.string :uid, null: false, default: ''
@@ -1,4 +1,4 @@
class ChangeUserIdNonnullable < ActiveRecord::Migration[5.1]
class ChangeUserIdNonnullable < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :invites, :user_id, false
+1 -1
View File
@@ -1,4 +1,4 @@
class CreateBackups < ActiveRecord::Migration[5.1]
class CreateBackups < ActiveRecord::Migration[5.2]
def change
create_table :backups do |t|
t.references :user, foreign_key: { on_delete: :nullify }
@@ -1,4 +1,4 @@
class AddFeaturedCollectionURLToAccounts < ActiveRecord::Migration[5.1]
class AddFeaturedCollectionURLToAccounts < ActiveRecord::Migration[5.2]
def change
add_column :accounts, :featured_collection_url, :string
end
@@ -1,4 +1,4 @@
class ChangeColumnsInNotificationsNonnullable < ActiveRecord::Migration[5.1]
class ChangeColumnsInNotificationsNonnullable < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :notifications, :activity_id, false
@@ -1,4 +1,4 @@
class AddAssignedAccountIdToReports < ActiveRecord::Migration[5.1]
class AddAssignedAccountIdToReports < ActiveRecord::Migration[5.2]
def change
safety_assured { add_reference :reports, :assigned_account, null: true, default: nil, foreign_key: { on_delete: :nullify, to_table: :accounts }, index: false }
end
@@ -1,4 +1,4 @@
class CreateReportNotes < ActiveRecord::Migration[5.1]
class CreateReportNotes < ActiveRecord::Migration[5.2]
def change
create_table :report_notes do |t|
t.text :content, null: false
@@ -1,4 +1,4 @@
class AddFieldsToAccounts < ActiveRecord::Migration[5.1]
class AddFieldsToAccounts < ActiveRecord::Migration[5.2]
def change
add_column :accounts, :fields, :jsonb
end
@@ -1,10 +1,10 @@
# frozen_string_literal: true
class ImproveIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class ImproveIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
# These changes ware reverted by migration 20180514140000.
# These changes were reverted by migration 20180514140000.
# add_index :statuses, [:account_id, :id, :visibility], where: 'visibility IN (0, 1, 2)', algorithm: :concurrently
# add_index :statuses, [:account_id, :id], where: 'visibility = 3', algorithm: :concurrently
# remove_index :statuses, column: [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106
@@ -1,6 +1,6 @@
# frozen_string_literal: true
class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
@@ -1,4 +1,8 @@
require_relative '../../lib/mastodon/migration_warning'
class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
include Mastodon::MigrationWarning
class Account < ApplicationRecord
# Dummy class, to make migration possible across version changes
has_one :user, inverse_of: :account
@@ -35,22 +39,11 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
if $stdout.isatty
say ''
say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run'
say 'for a very long time. We will pause for 10 seconds to allow you to'
say 'interrupt this migration if you are not ready.'
say ''
say 'This migration will irreversibly delete user accounts with duplicate'
say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`'
say 'task to manually deal with such accounts before running this migration.'
10.downto(1) do |i|
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1
end
end
migration_duration_warning(<<~EXPLANATION)
This migration will irreversibly delete user accounts with duplicate
usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`
task to manually deal with such accounts before running this migration.
EXPLANATION
duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_ary
@@ -1,7 +1,7 @@
# This migration is a duplicate of 20180410220657 and may get ignored, see
# config/initializers/0_duplicate_migrations.rb
class CreateBookmarks < ActiveRecord::Migration[5.1]
class CreateBookmarks < ActiveRecord::Migration[5.2]
def change
create_table :bookmarks do |t|
t.references :account, null: false
@@ -1,4 +1,8 @@
require_relative '../../lib/mastodon/migration_warning'
class MigrateAccountConversations < ActiveRecord::Migration[5.2]
include Mastodon::MigrationWarning
disable_ddl_transaction!
class Mention < ApplicationRecord
@@ -62,19 +66,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
end
def up
if $stdout.isatty
say ''
say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run'
say 'for a very long time. We will pause for 10 seconds to allow you to'
say 'interrupt this migration if you are not ready.'
say ''
10.downto(1) do |i|
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1
end
end
migration_duration_warning
migrated = 0
last_time = Time.zone.now
@@ -1,4 +1,4 @@
class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.1]
class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :list_accounts, :follow_id, true
@@ -1,4 +1,4 @@
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.1]
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.2]
def up
# Set up the media_attachments.id column to use our timestamp-based IDs.
safety_assured do
@@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddNotifyToFollows < ActiveRecord::Migration[5.1]
class AddNotifyToFollows < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!
@@ -1,4 +1,4 @@
class AccountIdsToTimestampIds < ActiveRecord::Migration[5.1]
class AccountIdsToTimestampIds < ActiveRecord::Migration[5.2]
def up
# Set up the accounts.id column to use our timestamp-based IDs.
safety_assured do
@@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddSettingsToUsers < ActiveRecord::Migration[6.1]
def change
add_column :users, :settings, :text
end
end
@@ -0,0 +1,84 @@
# frozen_string_literal: true
class MoveUserSettings < ActiveRecord::Migration[6.1]
class User < ApplicationRecord; end
MAPPING = {
default_privacy: 'default_privacy',
default_sensitive: 'web.default_sensitive',
default_language: 'default_language',
noindex: 'noindex',
theme: 'theme',
trends: 'web.trends',
unfollow_modal: 'web.unfollow_modal',
boost_modal: 'web.reblog_modal',
delete_modal: 'web.delete_modal',
auto_play_gif: 'web.auto_play',
display_media: 'web.display_media',
expand_spoilers: 'web.expand_content_warnings',
reduce_motion: 'web.reduce_motion',
disable_swiping: 'web.disable_swiping',
show_application: 'show_application',
system_font_ui: 'web.use_system_font',
aggregate_reblogs: 'aggregate_reblogs',
advanced_layout: 'web.advanced_layout',
use_blurhash: 'web.use_blurhash',
use_pending_items: 'web.use_pending_items',
crop_images: 'web.crop_images',
notification_emails: {
follow: 'notification_emails.follow',
reblog: 'notification_emails.reblog',
favourite: 'notification_emails.favourite',
mention: 'notification_emails.mention',
follow_request: 'notification_emails.follow_request',
report: 'notification_emails.report',
pending_account: 'notification_emails.pending_account',
trending_tag: 'notification_emails.trends',
appeal: 'notification_emails.appeal',
}.freeze,
always_send_emails: 'always_send_emails',
interactions: {
must_be_follower: 'interactions.must_be_follower',
must_be_following: 'interactions.must_be_following',
must_be_following_dm: 'interactions.must_be_following_dm',
}.freeze,
}.freeze
class LegacySetting < ApplicationRecord
self.table_name = 'settings'
def var
self[:var]&.to_sym
end
def value
YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) if self[:value].present?
end
end
def up
User.find_each do |user|
previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var)
user_settings = {}
MAPPING.each do |legacy_key, new_key|
value = previous_settings[legacy_key]&.value
next if value.blank?
if value.is_a?(Hash)
value.each do |nested_key, nested_value|
user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value
end
else
user_settings[new_key] = value
end
end
user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations
end
end
def down; end
end
@@ -34,6 +34,7 @@ class RemoveSuspendedSilencedAccountFields < ActiveRecord::Migration[5.2]
remove_column :accounts, :suspended, :boolean, null: false, default: false
remove_column :accounts, :silenced, :boolean, null: false, default: false
end
Account.reset_column_information
end
def down
@@ -1,7 +1,7 @@
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.0]
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.2]
def change
safety_assured do
remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil
remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil, precision: nil
end
end
end
+2 -1
View File
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2022_12_06_114142) do
ActiveRecord::Schema.define(version: 2023_02_15_074423) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -1063,6 +1063,7 @@ ActiveRecord::Schema.define(version: 2022_12_06_114142) do
t.inet "sign_up_ip"
t.boolean "skip_sign_in_token"
t.bigint "role_id"
t.text "settings"
t.index ["account_id"], name: "index_users_on_account_id"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id", where: "(created_by_application_id IS NOT NULL)"
+4 -2
View File
@@ -1,5 +1,7 @@
# frozen_string_literal: true
Dir[Rails.root.join('db', 'seeds', '*.rb')].sort.each do |seed|
load seed
Chewy.strategy(:mastodon) do
Dir[Rails.root.join('db', 'seeds', '*.rb')].sort.each do |seed|
load seed
end
end