遷移包
為 lip v0.37.0 及更早版本編寫的包使用格式版本 1、2 或 3 的 tooth.json。現在的包改用 lip.toml(參見 lip.toml)。lip 仍可安裝帶有這類 tooth.json 的包,但你的包的新版本應使用 lip.toml。lip pkg migrate 命令可幫助你完成轉換。
使用 lip pkg migrate
在包倉庫的根目錄(即包含 tooth.json 的目錄)中不帶參數運行 lip pkg migrate:
cd MyTool
lip pkg migrate
git add lip.toml tooth.json
git commit -m "Migrate tooth.json to lip.toml"它寫入由 tooth.json 轉換而來的 lip.toml,然後刪除 tooth.json。lip.toml 已存在,或 tooth.json 不存在或不是 lip 能讀取的格式 1、2 或 3 的 tooth.json 時,命令會失敗,且不做任何修改。
詢問
lip.toml 沒有 RID 模式:每個條目只指定一個平臺,即一個 RID。當結果需要某個舊文件未提供的值時,lip 會在終端上詢問,直到回答有效為止:
tooth.json中win-*這樣的platform模式所代表的平臺(RID),以逗號分隔(每個都必須匹配該模式);tooth.json中windows/amd64這樣不是 RID 的platform所代表的平臺(RID),以逗號分隔;- 沒有
platform的變體所適用的平臺(RID)(存在這類變體時)。
若標準輸入或標準錯誤不是終端(例如在 CI 中),lip pkg migrate 會失敗,指明本應詢問的值,且不做任何修改。
警告
所有被丟棄或以不同含義轉換的內容都會以警告形式輸出,並指明其來源字段,例如 variants (label '', win-x64).assets[1]。tooth.json 格式 1 和 2 的文件會先被轉換為格式 3,因此字段名按格式 3 給出。警告不會導致命令失敗;請檢查這些警告,按需修改 lip.toml,然後提交。
變化內容
format 為 4,tooth 變為 id,version 和 info 原樣複製,但 info.avatar_url 以 https:// 開頭時變為 info.logo,否則被丟棄並給出警告。變體按以下方式改寫:
- 每個標籤變為同名變體;空標籤變為變體
""。 - 對標籤適用的每個平臺(其各變體的
platform,模式和不是 RID 的值展開為你給出的 RID),該標籤下適用於該平臺的變體按 lip v0.37.0 的方式合併,結果變為該platform的一個條目。合併後的變體依賴github.com/LiteLDev/LeviLamina#client時,其side為client;依賴github.com/LiteLDev/LeviLamina的其他變體時,為server;不依賴 LeviLamina 時,結果變為兩個條目,每個運行端各一個。 dependencies連同其範圍變為deps。現在無效的範圍會在終端上詢問,直到回答是有效範圍;沒有終端時命令失敗且不做任何更改。- 每個資源保留其
type和urls,其placements變為place,轉換方式與 lip 讀取早期格式的tooth.json完全相同:\替換為/、空段和.段被移除後,dir放置規則採用目錄形式(src和dest以/結尾,或為""),src含*、?或[的file放置規則採用 glob 形式(dest以/結尾,或為""),其他file放置規則採用文件形式。在lip.toml中無效的放置規則會被省略,並給出警告。 lip.toml沒有tar、tgz和uncompressed資源類型。合併後的變體含有這類資源的平臺不會得到條目,並給出警告,這與 lip 在該平臺下不安裝其任何條目一致。preserve_files變為preserve,remove_files變為purge,其中的\替換為/;不含/的preserve_files模式加上前綴**/,不以/結尾的remove_files模式還會以帶結尾/的形式再寫一遍(參見侷限)。- scripts 變為
hooks:pre_install、post_install(先install,再post_install)、pre_uninstall(先pre_uninstall,再uninstall)和post_uninstall。 info之外的其他空值會被省略。
侷限
lip pkg migrate 只是輔助工具,不保證結果正確。請始終檢查其輸出。
lip.toml要求標籤處的version等於標籤版本,且倉庫的id等於其路徑。lip v0.37.0 會安裝違反這些規則的tooth.json;發佈前請檢查你的文件。- 放置規則按上述規則轉換,不查看它們放置的文件,隨後按
lip.toml的方式執行:src為模式的file放置規則會保留其匹配文件的子目錄,而tooth.json過去只按文件名放置它們;放置缺失文件的放置規則會使安裝失敗,而tooth.json過去會跳過它。請檢查這類放置規則。 - 不含
/的preserve_files模式過去會匹配任意目錄中的文件名;它會變為**/<pattern>。remove_files模式過去也會刪除匹配的目錄;它還會以帶結尾/的形式再寫一遍。不是有效 glob 的模式(例如以/開頭的)會被丟棄。 - 格式 1 和 2 中版本範圍無法在格式 3 中讀取的依賴(例如
2.16.x)在安裝tooth.json時本就會被忽略;lip 會報告它們,以便你手動添加。 - 安裝與卸載鉤子以外的腳本(例如
pre_pack或自定義腳本)以及格式 2 的prerequisites沒有對應項,會被丟棄。 - 遷移得到的包是一個文件包,把文件放到與舊
tooth.json相同的位置。如果你的包是 LeviLamina mod,可以考慮改為以mcmod資源發佈(參見 mod),它會被安裝到mods/<name>/。 - 對其他仍帶有
tooth.json的包的依賴仍然有效,因為 lip 仍可安裝它們。
只有名稱恰為 v<SemVer> 的標籤(例如 v1.2.3)才是版本。v1.2 這樣的標籤不是版本。