公式可能被弃用、禁用或移除的原因有很多。本文档解释了每种方法之间的差异,以及何时应该使用一种方法而不是另一种方法。
可以遵循以下一般规则
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> has been deprecated/disabled because it <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"