56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Mastodon
 | 
						|
  module MigrationWarning
 | 
						|
    WARNING_SECONDS = 10
 | 
						|
 | 
						|
    DEFAULT_WARNING = <<~WARNING_MESSAGE
 | 
						|
      WARNING: This migration may take a *long* time for large instances.
 | 
						|
      It will *not* lock tables for any significant time, but it may run
 | 
						|
      for a very long time. We will pause for #{WARNING_SECONDS} seconds to allow you to
 | 
						|
      interrupt this migration if you are not ready.
 | 
						|
    WARNING_MESSAGE
 | 
						|
 | 
						|
    def migration_duration_warning(explanation = nil)
 | 
						|
      return unless valid_environment?
 | 
						|
 | 
						|
      announce_warning(explanation)
 | 
						|
 | 
						|
      announce_countdown
 | 
						|
    end
 | 
						|
 | 
						|
    private
 | 
						|
 | 
						|
    def announce_countdown
 | 
						|
      WARNING_SECONDS.downto(1) do |i|
 | 
						|
        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
 | 
						|
        sleep 1
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def valid_environment?
 | 
						|
      $stdout.isatty && Rails.env.production?
 | 
						|
    end
 | 
						|
 | 
						|
    def announce_warning(explanation)
 | 
						|
      announce_message prepare_message(explanation)
 | 
						|
    end
 | 
						|
 | 
						|
    def announce_message(text)
 | 
						|
      say ''
 | 
						|
      text.each_line do |line|
 | 
						|
        say(line)
 | 
						|
      end
 | 
						|
      say ''
 | 
						|
    end
 | 
						|
 | 
						|
    def prepare_message(explanation)
 | 
						|
      if explanation.blank?
 | 
						|
        DEFAULT_WARNING
 | 
						|
      else
 | 
						|
        DEFAULT_WARNING + "\n#{explanation}"
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |