fix: 远程→本地迁移用旧环境远程配置(而非空的新data)

This commit is contained in:
ymq 2026-08-14 11:16:12 +08:00
parent 7e0a3d1d93
commit 17b90c8c12

View File

@ -158,11 +158,12 @@ async def set_work_env(sor, owner_type: str, owner_id: str, mode: str,
if not remote_config.get("remote_dir"):
return {"ok": False, "error": "远程模式需要 remote_dir"}
# 查旧环境(用于判断是否需要迁移)
# 查旧环境(完整记录,迁移时需要用旧的远程配置)
old_recs = await sor.sqlExe(
"SELECT mode FROM sd_work_envs WHERE owner_type=${t}$ AND owner_id=${o}$ LIMIT 1",
"SELECT * FROM sd_work_envs WHERE owner_type=${t}$ AND owner_id=${o}$ LIMIT 1",
{"t": owner_type, "o": owner_id})
old_mode = getattr(old_recs[0], "mode", "local") if old_recs else "local"
old_env = _row_to_env(old_recs[0]) if old_recs else None
# upsert
from appPublic.uniqueID import getID
@ -191,8 +192,12 @@ async def set_work_env(sor, owner_type: str, owner_id: str, mode: str,
# 触发迁移(模式切换 + 提供了 account_name 时)
migrated = {"migrated": False}
if account_name and old_mode != mode:
env = _row_to_env_from_dict(data)
migrated = await migrate_work_dir(account_name, old_mode, mode, env)
# remote → local 用旧的远程配置;local → remote 用新的远程配置
if old_mode == "remote" and mode == "local":
migrate_env = old_env or _row_to_env_from_dict(data)
else:
migrate_env = _row_to_env_from_dict(data)
migrated = await migrate_work_dir(account_name, old_mode, mode, migrate_env)
return {"ok": True, "mode": mode, "old_mode": old_mode, "migration": migrated}