弃用、禁用和移除公式

公式可能被弃用、禁用或移除的原因有很多。本文档解释了每种方法之间的差异,以及何时应该使用一种方法而不是另一种方法。

概述

可以遵循以下一般规则

弃用

如果用户尝试安装已弃用的公式,他们将看到一条警告消息,但安装将继续进行。

应该弃用一个公式以向用户表明该公式不应使用,并且将来会被禁用。已弃用的公式应继续由 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模块中找到

这些原因可以用它们的符号指定(注释显示将向用户显示的消息)

# 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"
Fork me on GitHub