-
Notifications
You must be signed in to change notification settings - Fork 679
整合包文件替换方式
bbaa edited this page Jul 24, 2022
·
4 revisions
代码参见 HMCLCore/org.jackhuang.hmcl.mod.ModpackInstallTask
由于不是git,所以不考虑合并用户修改和整合包作者修改的情况(比如Mod配置文件)。
整合包的任意一个文件的变化有如下10种情况:
- 如果旧版本整合包内应有这个文件
- 如果新版本整合包内应有这个文件
- 实际被用户删除了
- 不变(玩家不需要这个文件,如果整合包必需这个文件,造成的崩溃由玩家自行修复)
- 实际被用户修改了
- 不变(比如Mod配置文件,应当保留玩家的修改)
- 文件完好
- 替换
- 实际被用户删除了
- 如果新版本整合包内没有这个文件
- 实际被用户删除了
- 不变(玩家正好删除了需要删除的文件)
- 实际被用户修改了
- 删除(虽然文件被玩家修改了,但是新整合包不再需要此文件)
- 文件完好
- 删除
- 实际被用户删除了
- 如果新版本整合包内应有这个文件
- 如果旧版本整合包内没有这个文件
- 如果新版本整合包内应有这个文件
- 实际没有这个文件
- 添加
- 用户添加了和整合包相同的文件
- 不变
- 用户添加了和整合包不同的文件
- 替换(以整合包配置为准,比如同名的Mod文件但哈希值不同)
- 实际没有这个文件
- 如果新版本整合包内没有这个文件
- 不变
- 如果新版本整合包内应有这个文件
整合同类情况后,代码的逻辑为:
- 对于新整合包内有的文件
- 旧整合包内没有,则添加或覆盖
- 旧整合包内有这个文件
- 实际没有这个文件(被用户删除),则不变
- 实际有这个文件,但哈希值和旧整合包内的不一致,则不变
- 实际有这个文件,且哈希值和旧整合包内的一致,则替换
- 对于新整合包内没有的文件
- 旧整合包内有这个文件
- 删除
- 旧整合包内有这个文件