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 的形式)。警告不會導致命令失敗。輸出只是一個起點,並不保證正確:發佈前請檢查它,然後提交結果。細節與侷限請參閱遷移包。