Skip to content

fix(runtime): 修复本地导入失效与默认版本无法切换 - #10

Merged
lopinx merged 3 commits into
mainfrom
fix/lopinx/runtime-import-switch
Aug 22, 2026
Merged

fix(runtime): 修复本地导入失效与默认版本无法切换#10
lopinx merged 3 commits into
mainfrom
fix/lopinx/runtime-import-switch

Conversation

@lopinx

@lopinx lopinx commented Aug 22, 2026

Copy link
Copy Markdown
Owner

问题

  1. 设置默认 FrankenPHP 后无法切换:本地导入时若目标版本号已存在(如已下载的 1.12.7),import 直接静默返回成功而不复制文件,托管目录始终只有一个运行时,无其他版本可切换。
  2. 导入始终显示"可导入":前端 isImported 用路径包含匹配(托管目录路径不可能包含检测到的原始路径),判断永远失败。

修复

  • import 记录导入来源路径元数据(import_meta.json),list_installed 返回 imported_from
  • 版本号冲突时以来源目录名作后缀生成独立槽位(如 1.12.7-FrankenPHP),同一来源重复导入时复用槽位
  • InstalledRuntime / RuntimeInfo / 前端 RuntimeInfo 均透传 imported_fromisImported 改用来源路径精确匹配
  • 来源路径 canonicalize 后剥离 \\?\ 前缀,保证与检测路径可比较
  • 新增 3 个单元测试:版本冲突槽位生成、同一来源复用槽位、导入记录来源元数据

验证

  • cargo test -p runphp-core --lib runtime:5 passed
  • cargo build --workspace:通过
  • npx vue-tsc --noEmit:通过

lopinx added 3 commits August 22, 2026 21:58
本地导入时若目标版本号已存在(如已下载的 1.12.7),import 直接静默返回成功而不复制文件,导致托管目录始终只有一个运行时:前端"已导入"判断(按路径包含匹配)永远失败,用户也无法切换默认版本(因为只有一个可选项)。

- Changed: import 记录导入来源路径元数据(import_meta.json),list_installed 返回 imported_from
- Changed: 版本号冲突时以来源目录名作后缀生成独立槽位(如 1.12.7-FrankenPHP),同一来源重复导入时复用槽位
- Changed: InstalledRuntime/RuntimeInfo/前端 RuntimeInfo 均透传 imported_from;isImported 改用来源路径精确匹配
- Changed: 来源路径 canonicalize 后剥离 \?\ 前缀,保证与检测路径可比
- Why: 用户本地有多个 FrankenPHP 时需能分别导入并随时切换默认版本
导入的运行时在列表中显示托管副本路径(AppData 下),与用户预期不符。

- Changed: 路径列对导入项显示原始来源路径,悬停提示托管副本路径;下载安装项不变
- Why: 用户导入本地二进制后期望看到自己的原始路径,托管副本属于实现细节
导入本地 FrankenPHP 不再复制到 runtimes/ 目录,保留用户原始位置。

- Changed: import 移除 std::fs::copy/set_executable,仅写 import_meta.json
- Changed: ImportResult.path 直接返回来源路径;list_installed 中导入项的 path 字段即 imported_from
- Changed: find_import_slot 改为优先复用同源裸版本号槽位(已写入元数据),否则生成带来源目录名后缀
- Changed: read_import_meta 校验来源文件是否仍存在,丢失时自动清理元数据
- Changed: write_import_meta 自建中间目录,便于独立调用
- Changed: 单元测试改用 portable-foo/portable-bar 目录名匹配新断言

下载安装行为不变:二进制落到 data_dir/runtimes/<version>/frankenphp.exe。
@lopinx
lopinx force-pushed the fix/lopinx/runtime-import-switch branch from 030ab87 to bfcc2be Compare August 22, 2026 14:11
@lopinx
lopinx merged commit bffe7ee into main Aug 22, 2026
@lopinx
lopinx deleted the fix/lopinx/runtime-import-switch branch August 22, 2026 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant