From ec9bc7e6047686328df47c2af88d251a196b38b2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 30 May 2023 10:07:44 -0400 Subject: [PATCH] Consistent usage of CLI `dry_run?` method (#25116) --- lib/mastodon/cli/accounts.rb | 30 ++++++++++++------------------ lib/mastodon/cli/domains.rb | 15 +++++++-------- lib/mastodon/cli/feeds.rb | 10 ++++------ lib/mastodon/cli/helper.rb | 4 ++++ lib/mastodon/cli/main.rb | 11 +++++------ lib/mastodon/cli/media.rb | 27 ++++++++++++--------------- lib/mastodon/cli/preview_cards.rb | 5 ++--- lib/mastodon/cli/upgrade.rb | 3 +-- 8 files changed, 47 insertions(+), 58 deletions(-) diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index 417f126ccd..fd8368565c 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -217,7 +217,6 @@ module Mastodon::CLI exit(1) end - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' account = nil if username.present? @@ -234,9 +233,9 @@ module Mastodon::CLI end end - say("Deleting user with #{account.statuses_count} statuses, this might take a while...#{dry_run}") - DeleteAccountService.new.call(account, reserve_email: false) unless options[:dry_run] - say("OK#{dry_run}", :green) + say("Deleting user with #{account.statuses_count} statuses, this might take a while...#{dry_run_mode_suffix}") + DeleteAccountService.new.call(account, reserve_email: false) unless dry_run? + say("OK#{dry_run_mode_suffix}", :green) end option :force, type: :boolean, aliases: [:f], description: 'Override public key check' @@ -291,7 +290,7 @@ module Mastodon::CLI Account.remote.select(:uri, 'count(*)').group(:uri).having('count(*) > 1').pluck(:uri).each do |uri| say("Duplicates found for #{uri}") begin - ActivityPub::FetchRemoteAccountService.new.call(uri) unless options[:dry_run] + ActivityPub::FetchRemoteAccountService.new.call(uri) unless dry_run? rescue => e say("Error processing #{uri}: #{e}", :red) end @@ -332,7 +331,6 @@ module Mastodon::CLI LONG_DESC def cull(*domains) skip_threshold = 7.days.ago - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' skip_domains = Concurrent::Set.new query = Account.remote.where(protocol: :activitypub) @@ -350,7 +348,7 @@ module Mastodon::CLI end if [404, 410].include?(code) - DeleteAccountService.new.call(account, reserve_username: false) unless options[:dry_run] + DeleteAccountService.new.call(account, reserve_username: false) unless dry_run? 1 else # Touch account even during dry run to avoid getting the account into the window again @@ -358,7 +356,7 @@ module Mastodon::CLI end end - say("Visited #{processed} accounts, removed #{culled}#{dry_run}", :green) + say("Visited #{processed} accounts, removed #{culled}#{dry_run_mode_suffix}", :green) unless skip_domains.empty? say('The following domains were not available during the check:', :yellow) @@ -381,21 +379,19 @@ module Mastodon::CLI specified with space-separated USERNAMES. LONG_DESC def refresh(*usernames) - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' - if options[:domain] || options[:all] scope = Account.remote scope = scope.where(domain: options[:domain]) if options[:domain] processed, = parallelize_with_progress(scope) do |account| - next if options[:dry_run] + next if dry_run? account.reset_avatar! account.reset_header! account.save end - say("Refreshed #{processed} accounts#{dry_run}", :green, true) + say("Refreshed #{processed} accounts#{dry_run_mode_suffix}", :green, true) elsif !usernames.empty? usernames.each do |user| user, domain = user.split('@') @@ -406,7 +402,7 @@ module Mastodon::CLI exit(1) end - next if options[:dry_run] + next if dry_run? begin account.reset_avatar! @@ -417,7 +413,7 @@ module Mastodon::CLI end end - say("OK#{dry_run}", :green) + say("OK#{dry_run_mode_suffix}", :green) else say('No account(s) given', :red) exit(1) @@ -568,8 +564,6 @@ module Mastodon::CLI - not muted/blocked by us LONG_DESC def prune - dry_run = options[:dry_run] ? ' (dry run)' : '' - query = Account.remote.where.not(actor_type: %i(Application Service)) query = query.where('NOT EXISTS (SELECT 1 FROM mentions WHERE account_id = accounts.id)') query = query.where('NOT EXISTS (SELECT 1 FROM favourites WHERE account_id = accounts.id)') @@ -585,11 +579,11 @@ module Mastodon::CLI next if account.suspended? next if account.silenced? - account.destroy unless options[:dry_run] + account.destroy unless dry_run? 1 end - say("OK, pruned #{deleted} accounts#{dry_run}", :green) + say("OK, pruned #{deleted} accounts#{dry_run_mode_suffix}", :green) end option :force, type: :boolean diff --git a/lib/mastodon/cli/domains.rb b/lib/mastodon/cli/domains.rb index d885c95638..d17b253681 100644 --- a/lib/mastodon/cli/domains.rb +++ b/lib/mastodon/cli/domains.rb @@ -34,7 +34,6 @@ module Mastodon::CLI When the --purge-domain-blocks option is given, also purge matching domain blocks. LONG_DESC def purge(*domains) - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' domains = domains.map { |domain| TagManager.instance.normalize_domain(domain) } account_scope = Account.none domain_block_scope = DomainBlock.none @@ -79,23 +78,23 @@ module Mastodon::CLI # Actually perform the deletions processed, = parallelize_with_progress(account_scope) do |account| - DeleteAccountService.new.call(account, reserve_username: false, skip_side_effects: true) unless options[:dry_run] + DeleteAccountService.new.call(account, reserve_username: false, skip_side_effects: true) unless dry_run? end - say("Removed #{processed} accounts#{dry_run}", :green) + say("Removed #{processed} accounts#{dry_run_mode_suffix}", :green) if options[:purge_domain_blocks] domain_block_count = domain_block_scope.count - domain_block_scope.in_batches.destroy_all unless options[:dry_run] - say("Removed #{domain_block_count} domain blocks#{dry_run}", :green) + domain_block_scope.in_batches.destroy_all unless dry_run? + say("Removed #{domain_block_count} domain blocks#{dry_run_mode_suffix}", :green) end custom_emojis_count = emoji_scope.count - emoji_scope.in_batches.destroy_all unless options[:dry_run] + emoji_scope.in_batches.destroy_all unless dry_run? - Instance.refresh unless options[:dry_run] + Instance.refresh unless dry_run? - say("Removed #{custom_emojis_count} custom emojis#{dry_run}", :green) + say("Removed #{custom_emojis_count} custom emojis#{dry_run_mode_suffix}", :green) end option :concurrency, type: :numeric, default: 50, aliases: [:c] diff --git a/lib/mastodon/cli/feeds.rb b/lib/mastodon/cli/feeds.rb index 342b550ca3..34617e7538 100644 --- a/lib/mastodon/cli/feeds.rb +++ b/lib/mastodon/cli/feeds.rb @@ -18,14 +18,12 @@ module Mastodon::CLI Otherwise, a single user specified by USERNAME. LONG_DESC def build(username = nil) - dry_run = options[:dry_run] ? '(DRY RUN)' : '' - if options[:all] || username.nil? processed, = parallelize_with_progress(Account.joins(:user).merge(User.active)) do |account| - PrecomputeFeedService.new.call(account) unless options[:dry_run] + PrecomputeFeedService.new.call(account) unless dry_run? end - say("Regenerated feeds for #{processed} accounts #{dry_run}", :green, true) + say("Regenerated feeds for #{processed} accounts #{dry_run_mode_suffix}", :green, true) elsif username.present? account = Account.find_local(username) @@ -34,9 +32,9 @@ module Mastodon::CLI exit(1) end - PrecomputeFeedService.new.call(account) unless options[:dry_run] + PrecomputeFeedService.new.call(account) unless dry_run? - say("OK #{dry_run}", :green, true) + say("OK #{dry_run_mode_suffix}", :green, true) else say('No account(s) given', :red) exit(1) diff --git a/lib/mastodon/cli/helper.rb b/lib/mastodon/cli/helper.rb index b277e16ebd..78931b9a22 100644 --- a/lib/mastodon/cli/helper.rb +++ b/lib/mastodon/cli/helper.rb @@ -15,6 +15,10 @@ module Mastodon::CLI options[:dry_run] end + def dry_run_mode_suffix + dry_run? ? ' (DRY RUN)' : '' + end + def create_progress_bar(total = nil) ProgressBar.create(total: total, format: '%c/%u |%b%i| %e') end diff --git a/lib/mastodon/cli/main.rb b/lib/mastodon/cli/main.rb index e61a6f9c46..1594eadce8 100644 --- a/lib/mastodon/cli/main.rb +++ b/lib/mastodon/cli/main.rb @@ -94,7 +94,7 @@ module Mastodon::CLI exit(1) unless prompt.ask('Type in the domain of the server to confirm:', required: true) == Rails.configuration.x.local_domain - unless options[:dry_run] + unless dry_run? prompt.warn('This operation WILL NOT be reversible. It can also take a long time.') prompt.warn('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.') prompt.warn('A running Sidekiq process is required. Do not shut it down until queues clear.') @@ -104,12 +104,11 @@ module Mastodon::CLI inboxes = Account.inboxes processed = 0 - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' - Setting.registrations_mode = 'none' unless options[:dry_run] + Setting.registrations_mode = 'none' unless dry_run? if inboxes.empty? - Account.local.without_suspended.in_batches.update_all(suspended_at: Time.now.utc, suspension_origin: :local) unless options[:dry_run] + Account.local.without_suspended.in_batches.update_all(suspended_at: Time.now.utc, suspension_origin: :local) unless dry_run? prompt.ok('It seems like your server has not federated with anything') prompt.ok('You can shut it down and delete it any time') return @@ -126,7 +125,7 @@ module Mastodon::CLI json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(account)) - unless options[:dry_run] + unless dry_run? ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url| [json, account.id, inbox_url] end @@ -140,7 +139,7 @@ module Mastodon::CLI Account.local.without_suspended.find_each { |account| delete_account.call(account) } Account.local.suspended.joins(:deletion_request).find_each { |account| delete_account.call(account) } - prompt.ok("Queued #{inboxes.size * processed} items into Sidekiq for #{processed} accounts#{dry_run}") + prompt.ok("Queued #{inboxes.size * processed} items into Sidekiq for #{processed} accounts#{dry_run_mode_suffix}") prompt.ok('Wait until Sidekiq processes all items, then you can shut everything down and delete the data') rescue TTY::Reader::InputInterrupt exit(1) diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb index 045f6351ad..40b270ffb2 100644 --- a/lib/mastodon/cli/media.rb +++ b/lib/mastodon/cli/media.rb @@ -35,12 +35,12 @@ module Mastodon::CLI say('--prune-profiles and --remove-headers should not be specified simultaneously', :red, true) exit(1) end + if options[:include_follows] && !(options[:prune_profiles] || options[:remove_headers]) say('--include-follows can only be used with --prune-profiles or --remove-headers', :red, true) exit(1) end - time_ago = options[:days].days.ago - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + time_ago = options[:days].days.ago if options[:prune_profiles] || options[:remove_headers] processed, aggregate = parallelize_with_progress(Account.remote.where({ last_webfingered_at: ..time_ago, updated_at: ..time_ago })) do |account| @@ -51,7 +51,7 @@ module Mastodon::CLI size = (account.header_file_size || 0) size += (account.avatar_file_size || 0) if options[:prune_profiles] - unless options[:dry_run] + unless dry_run? account.header.destroy account.avatar.destroy if options[:prune_profiles] account.save! @@ -60,7 +60,7 @@ module Mastodon::CLI size end - say("Visited #{processed} accounts and removed profile media totaling #{number_to_human_size(aggregate)}#{dry_run}", :green, true) + say("Visited #{processed} accounts and removed profile media totaling #{number_to_human_size(aggregate)}#{dry_run_mode_suffix}", :green, true) end unless options[:prune_profiles] || options[:remove_headers] @@ -69,7 +69,7 @@ module Mastodon::CLI size = (media_attachment.file_file_size || 0) + (media_attachment.thumbnail_file_size || 0) - unless options[:dry_run] + unless dry_run? media_attachment.file.destroy media_attachment.thumbnail.destroy media_attachment.save @@ -78,7 +78,7 @@ module Mastodon::CLI size end - say("Removed #{processed} media attachments (approx. #{number_to_human_size(aggregate)})#{dry_run}", :green, true) + say("Removed #{processed} media attachments (approx. #{number_to_human_size(aggregate)})#{dry_run_mode_suffix}", :green, true) end end @@ -97,7 +97,6 @@ module Mastodon::CLI progress = create_progress_bar(nil) reclaimed_bytes = 0 removed = 0 - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' prefix = options[:prefix] case Paperclip::Attachment.default_options[:storage] @@ -123,7 +122,7 @@ module Mastodon::CLI record_map = preload_records_from_mixed_objects(objects) objects.each do |object| - object.acl.put(acl: s3_permissions) if options[:fix_permissions] && !options[:dry_run] + object.acl.put(acl: s3_permissions) if options[:fix_permissions] && !dry_run? path_segments = object.key.split('/') path_segments.delete('cache') @@ -145,7 +144,7 @@ module Mastodon::CLI next unless attachment.blank? || !attachment.variant?(file_name) begin - object.delete unless options[:dry_run] + object.delete unless dry_run? reclaimed_bytes += object.size removed += 1 @@ -194,7 +193,7 @@ module Mastodon::CLI begin size = File.size(path) - unless options[:dry_run] + unless dry_run? File.delete(path) begin FileUtils.rmdir(File.dirname(path), parents: true) @@ -216,7 +215,7 @@ module Mastodon::CLI progress.total = progress.progress progress.finish - say("Removed #{removed} orphans (approx. #{number_to_human_size(reclaimed_bytes)})#{dry_run}", :green, true) + say("Removed #{removed} orphans (approx. #{number_to_human_size(reclaimed_bytes)})#{dry_run_mode_suffix}", :green, true) end option :account, type: :string @@ -246,8 +245,6 @@ module Mastodon::CLI not be re-downloaded. To force re-download of every URL, use --force. DESC def refresh - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' - if options[:status] scope = MediaAttachment.where(status_id: options[:status]) elsif options[:account] @@ -274,7 +271,7 @@ module Mastodon::CLI next if media_attachment.remote_url.blank? || (!options[:force] && media_attachment.file_file_name.present?) next if DomainBlock.reject_media?(media_attachment.account.domain) - unless options[:dry_run] + unless dry_run? media_attachment.reset_file! media_attachment.reset_thumbnail! media_attachment.save @@ -283,7 +280,7 @@ module Mastodon::CLI media_attachment.file_file_size + (media_attachment.thumbnail_file_size || 0) end - say("Downloaded #{processed} media attachments (approx. #{number_to_human_size(aggregate)})#{dry_run}", :green, true) + say("Downloaded #{processed} media attachments (approx. #{number_to_human_size(aggregate)})#{dry_run_mode_suffix}", :green, true) end desc 'usage', 'Calculate disk space consumed by Mastodon' diff --git a/lib/mastodon/cli/preview_cards.rb b/lib/mastodon/cli/preview_cards.rb index c66bcb504a..2df3d095da 100644 --- a/lib/mastodon/cli/preview_cards.rb +++ b/lib/mastodon/cli/preview_cards.rb @@ -27,7 +27,6 @@ module Mastodon::CLI DESC def remove time_ago = options[:days].days.ago - dry_run = options[:dry_run] ? ' (DRY RUN)' : '' link = options[:link] ? 'link-type ' : '' scope = PreviewCard.cached scope = scope.where(type: :link) if options[:link] @@ -38,7 +37,7 @@ module Mastodon::CLI size = preview_card.image_file_size - unless options[:dry_run] + unless dry_run? preview_card.image.destroy preview_card.save end @@ -46,7 +45,7 @@ module Mastodon::CLI size end - say("Removed #{processed} #{link}preview cards (approx. #{number_to_human_size(aggregate)})#{dry_run}", :green, true) + say("Removed #{processed} #{link}preview cards (approx. #{number_to_human_size(aggregate)})#{dry_run_mode_suffix}", :green, true) end end end diff --git a/lib/mastodon/cli/upgrade.rb b/lib/mastodon/cli/upgrade.rb index e5c86b3d73..88390da5bf 100644 --- a/lib/mastodon/cli/upgrade.rb +++ b/lib/mastodon/cli/upgrade.rb @@ -17,7 +17,6 @@ module Mastodon::CLI LONG_DESC def storage_schema progress = create_progress_bar(nil) - dry_run = dry_run? ? ' (DRY RUN)' : '' records = 0 klasses = [ @@ -69,7 +68,7 @@ module Mastodon::CLI progress.total = progress.progress progress.finish - say("Upgraded storage schema of #{records} records#{dry_run}", :green, true) + say("Upgraded storage schema of #{records} records#{dry_run_mode_suffix}", :green, true) end private