公式可能會被廢棄、停用或移除的原因有很多。本文件說明了每種方法之間的差異,以及說明何時應使用一種方法而非另一種方法。
可以遵循以下一般經驗法則
deprecate!
應使用於不應再使用的公式。disable!
應使用於無法使用的公式。homebrew/core
中不再可接受或已停用超過一年的公式應予以移除。如果使用者嘗試安裝已廢棄的公式,他們將會看到警告訊息,但安裝仍會繼續進行。
應廢棄一個公式以向使用者表明不應使用該公式,且將來會停用該公式。已廢棄的公式應繼續由 Homebrew 維護人員維護,以便它們仍能從原始碼建置,且其套件仍能正常運作(即使上游未維護)。如果這不可行,則應停用它們。
廢棄的最常見原因是上游專案已廢棄、未維護或已封存。
僅在符合下列至少一項條件時才應廢棄公式
具有依賴項的公式不應在所有依賴項也廢棄之前或同時廢棄。
若要廢棄公式,請新增 deprecate!
呼叫。此呼叫應包含廢棄日期(ISO 8601 格式)和廢棄原因
deprecate! date: "YYYY-MM-DD", because: :reason
應將 date
參數設為停用期間應開始的日期,通常是當天的日期。如果 date
參數設為未來的日期,公式將不會在該日期之前停用。如果上游開發人員已指出專案或版本將停止支援的日期,這項功能會很有用。請勿將 date
參數回溯,因為這會造成使用者和維護人員的混淆。
because
參數可以是預設原因 (使用符號) 或自訂原因。有關 because
參數的更多詳細資訊,請參閱下方的 停用和停用原因 區段。
如果使用者嘗試安裝停用的公式,系統將會顯示錯誤訊息,而且安裝會失敗。
應停用公式,以告知使用者公式無法使用,而且未來將會移除。停用的公式可能無法再從來源建置,或沒有可用的瓶子。
停用公式最常見的原因如下
熱門公式 (例如在過去 90 天內有超過 1000 個 分析安裝),即使例如無法從來源建置且沒有授權,也不應在沒有至少六個月的停用期間的情況下停用。
不熱門的公式 (例如在過去 90 天內有少於 1000 個 分析安裝),可以立即停用,原因包括上述任何原因,例如無法在任何支援的 macOS 版本或 Linux 上從來源建置。它們可以在停用日期後三個月手動移除。
若要停用公式,請新增 disable!
呼叫。此呼叫應包含 ISO 8601 格式的停用日期和停用原因
disable! date: "YYYY-MM-DD", because: :reason
應將 date
參數設為停用原因生效的日期。如果沒有明確的日期,但需要停用公式,請使用當天的日期。如果 date
參數設為未來的日期,公式將會停用至該日期 (公式將在該日期停用)。
because
參數可以是預設原因 (使用符號) 或自訂原因。有關 because
參數的更多詳細資訊,請參閱下方的 停用和停用原因 區段。
如果公式不符合我們對 可接受公式 或 版本化公式 的標準、具有非開放原始碼授權,或已停用超過一年,則應移除該公式。
注意:已停用的 homebrew/core
公式將在停用日期後一年自動移除。
當公式停用或禁用時,必須提供說明動作的原因。
有兩種方式表示原因。建議的方式是使用預先存在的符號表示原因。可用符號如下列出,並可在 DeprecateDisable
模組 中找到
:does_not_build
:無法在任何受支援的 macOS 版本或 Linux 上從原始碼建置公式。:no_license
:我們無法識別公式的授權。:repo_archived
:上游儲存庫已封存,且未指向我們可使用的替代品。:repo_removed
:上游儲存庫已移除,且首頁上未提及我們可使用的替代品。:unmaintained
:專案似乎已放棄,即至少一年沒有提交,且有關鍵錯誤或 CVE 已報告且未解決較長時間。注意:有些軟體已「完成」;缺乏活動並不表示需要移除。:unsupported
:上游開發人員不支援 Homebrew 編譯的軟體(例如上游僅支援低於 10.15 的 macOS 版本)。:deprecated_upstream
:專案已在上游停用,且未指向我們可使用的替代品。:versioned_formula
:公式是版本化公式,且不再 符合需求。:checksum_mismatch
:公式目前版本的原始碼檢查碼已在建置套件後變更,且我們無法找到信譽良好的來源或說明來證明這一點。這些原因可以用其符號指定(註解顯示將顯示給使用者的訊息)
# Warning: <formula> has been deprecated because it is deprecated upstream!
deprecate! date: "2020-01-01", because: :deprecated_upstream
# Error: <formula> has been disabled because it does not build!
disable! date: "2020-01-01", because: :does_not_build
如果這些預先存在的理由不適合,則可以指定自訂理由。此類理由應寫成符合句子 <formula> 已停用/禁用,因為它 <reason>!
。
自訂理由的範例寫法良好:
# Warning: <formula> has been deprecated because it fetches unversioned dependencies at runtime!
deprecate! date: "2020-01-01", because: "fetches unversioned dependencies at runtime"
一個表達不佳的客製化原因範例會是
# Error: <formula> has been disabled because it invalid license!
disable! date: "2020-01-01", because: "invalid license"