def restore
db_id = extract_option("--db")
confirm = extract_option("--confirm")
to_name, to_url = resolve_db_id(db_id, :default => "DATABASE_URL")
db_id = to_name
abort(" ! No database addon detected.") unless to_url
backup_id = args.shift
if backup_id =~ /^http(s?):\/\//
from_url = backup_id
from_name = "EXTERNAL_BACKUP"
from_uri = URI.parse backup_id
backup_id = from_uri.path.empty? ? from_uri : File.basename(from_uri.path)
else
if backup_id
backup = pgbackup_client.get_backup(backup_id)
abort("Backup #{backup_id} already deleted.") if backup["destroyed_at"]
else
backup = pgbackup_client.get_latest_backup
to_uri = URI.parse backup["to_url"]
backup_id = File.basename(to_uri.path, '.*')
backup_id = "#{backup_id} (most recent)"
end
from_url = backup["to_url"]
from_name = "BACKUP"
end
db_display = db_id
db_display += " (DATABASE_URL)" if db_id != "DATABASE_URL" && config_vars[db_id] == config_vars["DATABASE_URL"]
padding = " " * "#{db_display} <---restore--- ".length
display "\n#{db_display} <---restore--- #{backup_id}"
if backup
display padding + "#{backup['from_name']}"
display padding + "#{backup['created_at']}"
display padding + "#{backup['size']}"
end
@args += ['--confirm', confirm]
if confirm_command
restore = transfer!(from_url, from_name, to_url, to_name)
restore = poll_transfer!(restore)
if restore["error_at"]
message = " ! An error occurred and your restore did not finish."
message += "\n ! The backup url is invalid. Use `pgbackups:url` to generate a new temporary URL." if restore['log'] =~ /Invalid dump format: .*: XML document text/
abort(message)
end
end
end