feat(core): M112 整合包导出(mrpack 优先 + CF 清单,逐文件远程判定与内联兜底)
新增 addon::export(实例目录 → .mrpack / CF manifest.json): - 逐文件三分:远程引用 / 内联进 overrides/ / 跳过(读不了、符号链接、路径不安全)。 「能否被远程替代」= 目录能证明身份(Modrinth SHA-1、CF 指纹)**且**目标格式表达得了; 证明不了的一律内联,绝不丢、绝不编,逐条进结构化报告(ExportReport)。 - game / dependencies 来自实例快照:versions/<id>/<id>.json 的继承链「叶子」+ 库坐标推加载器, 不解析 <mc>-<loader>-<ver> 字符串(社区实例名不统一,那是猜)。 - .disabled 走路径后缀(不是 env.client=optional:后者装回来默认启用,跨启动器不保真)。 - CF files[] 只写能确定 projectID/fileID 的项;禁用文件 CF 表达不了,内联并记原因。 CF modLoaders[].id 按官方写法:NeoForge 在 1.20.1 上写 neoforge-1.20.1-<ver>。 - 尺寸护栏:fileSize 超 u32 报 pack_limits;整包撞 ZIP64 阈值由 format::write 拒绝。 配套改动: - pack/curseforge/fingerprint:MurmurHash2-32 + 0x09/0x0A/0x0D/0x20 过滤、seed=1、 长度用过滤后长度、哨兵 811513880 短路;金标准由一份独立 Java 实现算出(双向验证)。 - pack/format/payload:PackPayload 加 with_sources(包内条目名 → 实例源文件), 让「实例里的 mods/x.jar → 包里的 overrides/mods/x.jar」不用拼路径。 - pack/format:写盘时按未压缩总量守 ZIP64 阈值。 - pack/modrinth:禁用位改写路径后缀;fileSize 按 u32 校验。 - pack/manifest:PackLoader::curse_id_for 处理 NeoForge 的 MC 前缀特例。 测试:导出管线 10 条 + 往返保真 4 条(三种格式夹具;允许的差异逐条在测试文件头登记, 并在报告 notes 里给出)。M111 未合并,故本轮「导入」用 M110 的 read + 同形实例目录, 真 import_pack → export → import_pack 端到端留作欠账。
This commit is contained in:
1 parent
3ffb1c4fee
commit
90b233088f
20 files changed
+2491
-60
No files matched your search
@@ -14,13 +14,22 @@
|
||||
//! - [`import`](P2 · M111):**导入管线**——三种格式 → 实例目录:跨段落地、overrides 三方
|
||||
//! 合并(保用户改动)、两阶段补全与失败分级、临时目录 + rename/journal 回滚、结构化报告。
|
||||
//! 导出(M112)另起模块。
|
||||
//! - [`export`](P2 · M112):**导出管线**——实例目录 → `.mrpack`(优先)/ CF `manifest.json`。
|
||||
//! 逐文件判定「能否被远程替代」(Modrinth SHA-1 + CF 指纹),判定不了的**内联进 `overrides/`**
|
||||
//! 并逐条进报告;`.disabled` 用路径后缀;`game`/`dependencies` 从实例快照取。
|
||||
//! MultiMC/Prism **只导入不导出**(有意省略)。
|
||||
//!
|
||||
//! 规划中:本地 mod 管理(D10 §3)、CF/Modrinth 客户端(§5)。
|
||||
|
||||
pub mod export;
|
||||
pub mod import;
|
||||
pub mod loader;
|
||||
pub mod pack;
|
||||
|
||||
pub use export::{
|
||||
export_instance, ExportFile, ExportReport, ExportRequest, FileClass, FileReason, RemoteCatalog,
|
||||
RemoteHit,
|
||||
};
|
||||
pub use import::{
|
||||
import_pack, ConflictFile, ConflictPolicy, ImportError, ImportErrorKind, ImportProgress,
|
||||
ImportProgressSink, ImportReport, ImportRequest, ImportStage, ImportStatus, ImportedFile,
|
||||
|
||||
Reference in new issue
Block a user