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
|