12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # 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
|