CRITICAL: hardcode state.json to ~/.migrate/state.json, guarantee reset_state clears completed_steps
This commit is contained in:
@@ -43,8 +43,9 @@ signal.signal(signal.SIGTERM, _handle_sigterm)
|
||||
|
||||
|
||||
def main():
|
||||
# Инициализируем state сразу, чтобы _LAST_STATE был готов при любом выходе
|
||||
# Инициализируем state сразу, чтобы _LAST_STATE был готов при любом выходe
|
||||
state.load_state()
|
||||
|
||||
parser = argparse.ArgumentParser(description="Docker Service Migration Tool")
|
||||
parser.add_argument("--mode", choices=["source", "target"], help="Режим работы")
|
||||
parser.add_argument("--resume", action="store_true", help="Продолжить после ошибки")
|
||||
|
||||
@@ -14,29 +14,22 @@ from datetime import datetime
|
||||
STATE_FILE = None
|
||||
_LAST_STATE = None
|
||||
|
||||
# Жёсткий путь для state.json — один, навсегда
|
||||
STATE_PATH = os.path.join(os.path.expanduser("~"), ".migrate", "state.json")
|
||||
|
||||
def _state_path():
|
||||
global STATE_FILE
|
||||
if STATE_FILE:
|
||||
return STATE_FILE
|
||||
# State никогда не храним рядом со скриптом — install.sh его удалит
|
||||
candidates = [
|
||||
os.path.join(os.path.expanduser("~"), ".migrate", "state.json"),
|
||||
"/var/tmp/docker-migrate/state.json",
|
||||
]
|
||||
for c in candidates:
|
||||
d = os.path.dirname(c)
|
||||
if os.path.isdir(d):
|
||||
STATE_FILE = c
|
||||
return c
|
||||
try:
|
||||
# Всегда используем ~/.migrate/state.json
|
||||
d = os.path.dirname(STATE_PATH)
|
||||
try:
|
||||
if not os.path.isdir(d):
|
||||
os.makedirs(d, exist_ok=True)
|
||||
STATE_FILE = c
|
||||
return c
|
||||
except PermissionError:
|
||||
continue
|
||||
fallback = os.path.join(os.getcwd(), ".migrate-state.json")
|
||||
STATE_FILE = fallback
|
||||
return fallback
|
||||
except Exception:
|
||||
pass
|
||||
STATE_FILE = STATE_PATH
|
||||
return STATE_FILE
|
||||
|
||||
|
||||
def load_state():
|
||||
|
||||
Reference in New Issue
Block a user