lip pkg migrate
把当前目录中 lip v0.x 的 tooth.json 迁移为 lip.toml。
概要
shell
lip pkg migrate说明
请在包仓库的根目录中运行。它写入一个由该处格式版本为 1、2 或 3 的 tooth.json 转换而来的 lip.toml(参见 lip.toml),然后删除 tooth.json:
tooth变为id,version和info原样复制;以https://开头的info.avatar_url变为info.logo,否则被丢弃。- 每个标签变为一个变体。对其适用的每个平台(RID),该标签下的变体按 lip v0.37.0 的方式合并,合并后的变体依赖
github.com/LiteLDev/LeviLamina#client时变为一个客户端条目,依赖github.com/LiteLDev/LeviLamina的其他变体时变为一个服务端条目,不依赖 LeviLamina 时变为两个条目,每个运行端各一个。 - 每个条目的转换方式与 lip 读取早期格式的
tooth.json完全相同:dependencies变为deps;资源保留其type和urls,其placements变为place;preserve_files变为preserve(不含/的模式加上前缀**/),remove_files变为purge(不以/结尾的模式还会再加上以/结尾的形式);scripts 变为hooks。在lip.toml中无效的放置规则和模式会被略去。 - 合并后的变体含有类型为
tar、tgz或uncompressed的资源的平台不会得到条目,因为lip.toml没有这些资源类型。 - 模板会被保留:
https://example.com/v{{version}}/tool.zip这样的值(格式 1 和 2 中的$(version))在lip.toml中写为同样的模板,其中{{tooth}}(格式 1 和 2 中的$(path))改名为{{id}}。在lip.toml中会渲染出不同值的模板(例如{{format_version}})写为其渲染后的值。
lip.toml 没有 RID 模式。当结果需要的某个值缺失或无效时,例如 tooth.json 中 win-* 这样的 platform 模式或 windows/amd64 这样不是 RID 的 platform 所代表的平台(RID),或没有 platform 的变体所适用的平台,lip 会在终端上询问,直到回答有效为止。若标准输入或标准错误不是终端,则会失败,指明本应询问的值,且不做任何修改。
若 lip.toml 已存在,或 tooth.json 不存在或不是 lip 能读取的格式版本 1、2 或 3 的 tooth.json,lip pkg migrate 会失败,且不做任何修改。
所有被丢弃或以不同含义转换的内容都会以警告形式输出,并指明其来源字段(按格式 3 的形式)。警告不会导致命令失败。输出只是一个起点,并不保证正确:发布前请检查它,然后提交结果。细节与局限请参阅迁移包。