跳到正文
本頁目錄

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