现状
wproj conf update 目前只支持整体配置更新,一次性同步 conf、models、topology、connectors 四个目录,所有内容来自同一个 repo。
需求
支持双 Repo 模式:将 models/ 和 infra/(conf + topology + connectors)拆分到两个独立 repo,各自独立更新。
设计
两种模式,互斥
单 Repo 模式(向后兼容,行为不变):
[project_remote]
enabled = true
repo = "ssh://git@github.com/acme/wp-project.git"
init_version = "1.0"
wproj conf update 全量更新 4 个目录。
双 Repo 模式(新增):
[project_remote]
enabled = true
[project_remote.models]
repo = "ssh://git@github.com/acme/wp-models.git"
init_version = "1.4.2"
[project_remote.infra]
repo = "ssh://git@github.com/acme/wp-infra.git"
init_version = "1.0.0"
目录映射
models repo → ["models"]
infra repo → ["conf", "topology", "connectors"]
CLI
wproj conf update --group models # 仅从 models repo 拉取,只更新 models/
wproj conf update --group infra # 仅从 infra repo 拉取,只更新 conf/topology/connectors/
双 repo 模式下:wproj conf update 不带 --group 报错,必须明确指定。两个 group 各自独立更新,不允许一次性操作两个。
模式判定
ProjectRemoteConf 加载时:
models 和 infra 都配置了 → 双 repo 模式
- 只有顶层
repo → 单 repo 模式(兼容现有配置)
- 只配置一个 sub-group → 报错,必须两个都配
enabled 在顶层统一控制,两个 group 保持一致的 enable/disable 状态。
状态文件 (.run/project_remote_state.json)
{
"models": {"version": "1.4.2", "tag": "v1.4.2", "revision": "abc123"},
"infra": {"version": "1.0.0", "tag": "v1.0.0", "revision": "def456"}
}
单 repo 模式下 state 也迁移为同样结构(models/infra 指向同一个 revision)。
涉及改动
| # |
文件 |
改动 |
| 1 |
wp-motor/wp-config/src/engine.rs |
ProjectRemoteConf 新增 models/infra 子结构(含 repo + init_version),保留顶层字段兼容旧配置;新增模式判定逻辑 |
| 2 |
src/project_remote/state.rs |
State schema 改为 models/infra map 结构 |
| 3 |
src/project_remote/mod.rs |
sync 链路按 group 分支:根据 group 选择 repo、version、tag,只 diff/sync 对应的目录子集 |
| 4 |
src/project_remote/managed.rs |
managed_dirs_differ、backup_managed_dirs、sync_managed_dirs 增加 dirs: &[&str] 参数 |
| 5 |
src/wproj/args.rs |
ConfUpdateArgs 新增 --group 参数(models / infra) |
| 6 |
src/wproj/handlers/conf.rs |
解析 group,双 repo 模式下 --group 必填,传入 sync 链路 |
现状
wproj conf update目前只支持整体配置更新,一次性同步conf、models、topology、connectors四个目录,所有内容来自同一个 repo。需求
支持双 Repo 模式:将
models/和infra/(conf+topology+connectors)拆分到两个独立 repo,各自独立更新。设计
两种模式,互斥
单 Repo 模式(向后兼容,行为不变):
wproj conf update全量更新 4 个目录。双 Repo 模式(新增):
目录映射
CLI
双 repo 模式下:
wproj conf update不带--group报错,必须明确指定。两个 group 各自独立更新,不允许一次性操作两个。模式判定
ProjectRemoteConf加载时:models和infra都配置了 → 双 repo 模式repo→ 单 repo 模式(兼容现有配置)enabled在顶层统一控制,两个 group 保持一致的 enable/disable 状态。状态文件 (
.run/project_remote_state.json){ "models": {"version": "1.4.2", "tag": "v1.4.2", "revision": "abc123"}, "infra": {"version": "1.0.0", "tag": "v1.0.0", "revision": "def456"} }单 repo 模式下 state 也迁移为同样结构(
models/infra指向同一个 revision)。涉及改动
wp-motor/wp-config/src/engine.rsProjectRemoteConf新增models/infra子结构(含repo+init_version),保留顶层字段兼容旧配置;新增模式判定逻辑src/project_remote/state.rsmodels/inframap 结构src/project_remote/mod.rssrc/project_remote/managed.rsmanaged_dirs_differ、backup_managed_dirs、sync_managed_dirs增加dirs: &[&str]参数src/wproj/args.rsConfUpdateArgs新增--group参数(models/infra)src/wproj/handlers/conf.rs--group必填,传入 sync 链路