LankeOS v0.07
LankeOS v0.07 Release
lpkg 代码库全面重构,迈向工业级包管理。
核心变更 (Major Changes)
-
lpkg 递归安装引擎(
install_packages_internal):- 重构
install_packages(),提取递归驱动的install_packages_internal(),通过InstallContext共享事务状态。 install_packages()现为清晰的三阶段流程:决议 → 确认 → 安装,职责分离、可测试性大幅提升。
- 重构
-
动态依赖发现(
ensure_dependencies_satisfied):- 在
InstallationTask::prepare()阶段即时读取包内metadata.json,发现未在索引中声明的依赖。 - 缺失依赖自动加入安装队列;不可解析时抛出
LpkgException触发原子回滚。 - 支持虚拟包(
provides)回退链:已安装提供者 → 同事务内其他包的provides→ 目标文件预览。
- 在
-
零预下载架构优化:
- 修复了
verify_metadata_phase在用户确认前下载包的严重问题。(在之前的Broken commit引入) - 现流程:决议(无网络)→ 显示计划 → 用户确认 → 逐包下载验证 → 安装。确认前零网络开销。
- 下载与安装无缝融合:验证通过的包直接缓存路径供安装环节复用,避免重下载。
- 元数据漂移时自动回滚本批已安装包 → 重解析 → 重试,保证事务一致性。
- 修复了
-
代码库拆分(
package_manager.cpp大重构):- 将 1117 行的巨型
package_manager.cpp拆分为三个逻辑单元:install_common.hpp/cpp:共享辅助函数(钩子、元数据解析、依赖决议、一致性检查)installation_task.cpp:单包事务生命周期(run→prepare→commit→rollback)package_manager.cpp:保留公共 API(安装/移除/升级/查询等)
- 三文件独立编译,不影响 Makefile 自动扫描规则。
- 将 1117 行的巨型
国际化与测试体系
- l10n 清理: 自动删除 68 个未使用的翻译键(
en.txt/zh.txt),保留精确匹配的 176 个活跃键。 - 新增国际化字符串:
info.installing_discovered_dep、error.unresolvable_drift。 - 新增集成测试(3 项):
UnresolvableDriftFailure:索引声明 lib-old,实际需要 lib-new 且 lib-new 不存在 → 抛异常DiscoverNewDependency:索引声明无依赖,实际需要 lib-extra → 自动发现并安装AtomicRollbackOnFailedDep:发现依赖后该依赖不在仓库中 → 原子回滚确保无残留
- 完整测试覆盖:58 项测试全部通过(+3 vs v0.06)。
修复的问题
- 确认前下载:
verify_metadata_phase在用户确认(y/n)前就下载了所有包,导致取消也浪费流量。现已完全移入确认后的安装循环。 - 误删 l10n 键:三元表达式中的
info.package_list_item/info.package_list_item_dep因 grep 模式不匹配而被清理脚本误删,已恢复。
系统规格更新 (Technical Specs)
| 组件 | 版本 | 状态 |
|---|---|---|
| lpkg | v1.5 (重构版) | 递归安装引擎 + 动态依赖发现 |
| 源码行数 | 4668 行 (C++) | 拆为 19 个 .cpp + 17 个 .hpp |
| 测试行数 | 2245 行 | 58 项测试,全部通过 |
| 核心模块 | 3 文件拆分 | install_common / installation_task / package_manager |
| l10n | 176 个活跃键 | en.txt + zh.txt 双语内容 |
下一步计划 (Roadmap)
- 进一步丰富 lpkg 官方源软件仓库,提供更上层的用户态常用工具 (长期任务)
- 引入系统快照与回滚机制
- 并行下载加速支持
开发者的话
v0.07 是 lpkg 自 v1.5 发布以来最大的一次底层重构。核心变化不是「加了什么功能」,而是 「安装引擎的工作方式被重新设计了」。
旧版1.5(开发中的unstable版本)在用户确认前就下载包,违背了「先看再买」的基本原则;索引与实际包不一致时处理脆弱,依赖发现完全依赖索引的准确性。这版通过 install_packages_internal 递归引擎 + ensure_dependencies_satisfied 动态补全 + 元数据逐包验证,让 lpkg 在真相面前(即包内的 metadata.json)永远有最终发言权。
同时,代码库结构从单文件 1117 行拆分为三模块,为后续的功能扩展和维护铺平了道路。
当前lpkg版本:1.5稳定(改天我改一下修订号)
温馨提醒:请使用最新的lpkg,因为最近的breaking change导致了一些兼容问题。以及之前开发中的版本有我之前提到的Bug。
Git Commit Summary (cfbb0f7 → 40db360)
40db360 fix: truly eliminate pre-download — inline metadata verify inside install loop
cd8dded fix: move metadata verify after user confirmation, restore accidentally removed i18n keys
3282c91 refactor(core): split package_manager.cpp into three logical units
db9287c refactor(core): recursive install engine with dynamic dep discovery and i18n cleanup
0165536 .
cfc0d32 fix broken tests
cfbb0f7 chore: metadata consolidation refactor (BROKEN - contains test failures, needs fixes)
7 commits, 30 files changed, +1561 / −1264 lines