From a4be7c59d9f48886c1a3866d9e53e6142e56c02b Mon Sep 17 00:00:00 2001 From: Stitch505 <–Gleb@stitch505.su> Date: Fri, 22 May 2026 23:01:52 +0400 Subject: [PATCH] fix: FSM calls do_transfer_offer() correctly; resume remembers target_host/user/port --- core/fsm.py | 4 ++-- source/source.py | 48 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/core/fsm.py b/core/fsm.py index e84435f..4db4ce5 100644 --- a/core/fsm.py +++ b/core/fsm.py @@ -81,8 +81,8 @@ class FSM: from source.source import do_stop_service do_stop_service() elif name == "TRANSFER": - from transfer.transfer import do_transfer - do_transfer() + from source.source import do_transfer_offer + do_transfer_offer() elif name == "DONE": success("Source-режим завершён") diff --git a/source/source.py b/source/source.py index 402bfa0..2d2053d 100644 --- a/source/source.py +++ b/source/source.py @@ -330,23 +330,41 @@ def do_stop_service(): def do_transfer_offer(): step(4, "ПЕРЕНОС НА НОВЫЙ СЕРВЕР (опционально)") - if not confirm("Перенести архив на новый сервер сейчас", default="y"): - success("Готово! Архив оставлен на текущем сервере.") - success(f"Manifest и архив лежат в: {_ARCHIVE_DIR}") - state.set_stage("DONE") - return + st = state.load_state() + + # При resume: проверяем, были ли уже введены target-параметры + resume_host = st.get("target_host") + resume_user = st.get("target_user") + resume_port = st.get("target_port", 22) + if resume_host and resume_host not in ("", "None"): + info(f"Обнаружены ранее введённые параметры target: {resume_user}@{resume_host}:{resume_port}") + if confirm("Использовать эти параметры повторно (если ошибка была в SSH-ключе, выберите Y, после фикса)", default="y"): + host, user, port_int = resume_host, resume_user or "root", int(resume_port) + else: + # Сбрасываем, чтобы запросить заново + state.set_stage("SOURCE_STOP", target_host=None, target_user=None, target_port=None) + host = user = None + else: + host = user = None - host = prompt("IP или домен нового сервера") if not host: - warn("IP/домен не указан. Перенос пропущен.") - success(f"Архив оставлен в: {_ARCHIVE_DIR}") - state.set_stage("DONE") - return - user = prompt("SSH user (root или обычный пользователь)") - if not user: - user = "root" - port = prompt("SSH порт (Enter=22)") or "22" - port_int = int(port) + if not confirm("Перенести архив на новый сервер сейчас", default="y"): + success("Готово! Архив оставлен на текущем сервере.") + success(f"Manifest и архив лежат в: {_ARCHIVE_DIR}") + state.set_stage("DONE") + return + + host = prompt("IP или домен нового сервера") + if not host: + warn("IP/домен не указан. Перенос пропущен.") + success(f"Архив оставлен в: {_ARCHIVE_DIR}") + state.set_stage("DONE") + return + user = prompt("SSH user (root или обычный пользователь)") + if not user: + user = "root" + port = prompt("SSH порт (Enter=22)") or "22" + port_int = int(port) # SSH-диагностика: ищем ключи, проверяем доступ from transfer.ssh import pick_or_setup_ssh_key