Consistent usage of CLI dry_run? method (#25116)
				
					
				
			This commit is contained in:
		
							parent
							
								
									3d253b9830
								
							
						
					
					
						commit
						ec9bc7e604
					
				
					 8 changed files with 47 additions and 58 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
|  | @ -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] | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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' | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Reference in a new issue