5.2.命名
最后更新于
最后更新于
Port 的 Makefile 的第一部分命名 Port,描述其版本号,并将其列入正确的类别。
PORTNAME
将 PORTNAME
设置为软件的基础名称。它作为 FreeBSD 包的基础名称,并用于 。
重要
包名称必须在整个 Ports 树中唯一。确保
PORTNAME
不被现有的 Port 使用,并且没有其他 Port 使用相同的PKGBASE
。如果该名称已被使用,可以添加 。
DISTVERSION
或 PORTVERSION
将 DISTVERSION
设置为软件的版本号。
PORTVERSION
是用于 FreeBSD 包的版本。它将自动从 DISTVERSION
推导出来,以便与 FreeBSD 的包版本方案兼容。如果版本中包含字母,可能需要设置 PORTVERSION
而不是 DISTVERSION
。
重要
一次只能设置
PORTVERSION
和DISTVERSION
其中一个。
有时,某些软件使用的版本方案与 DISTVERSION
在 PORTVERSION
中的转换方式不兼容。
技巧
在更新 Port 时,可以使用 的
-t
参数检查新版本是否大于或小于之前的版本。请参阅 。
示例 1. 使用 比较版本
pkg version -t
接受两个版本作为参数,它会返回 <
、=
或 >
,如果第一个版本小于、等于或大于第二个版本。
① 1.2
在 1.3
之前。
② 1.2
和 1.2
相等,因为它们版本相同。
③ 1.2
和 1.2.0
相等,因为零表示没有版本。
④ 1.2
在 1.2.p1
之后,因为 .p1
,可以理解为“预发布 1”。
⑤ 1.2.a1
在 1.2.b1
之前,可以理解为“alpha”和“beta”,a
在 b
之前。
⑥ 1.2
在 1.2p1
之前,可以理解为“2,修补级别 1”,它是任何 2.X
后但在 3
之前的版本。
在这里,a
、b
和 p
被用作“alpha”、“beta”或“预发布”和“修补级别”的缩写,但它们只是字母,按字母顺序排序,因此可以使用任何字母,它们将按适当的顺序排序。
表 1. DISTVERSION
和派生的 PORTVERSION
示例
0.7.1d
0.7.1.d
10Alpha3
10.a3
3Beta7-pre2
3.b7.p2
8:f_17
8f.17
示例 2. 使用 DISTVERSION
当版本号仅包含由点、破折号或下划线分隔的数字时,使用 DISTVERSION
。
这将生成 PORTVERSION
为 1.2.4
。
示例 3. 使用 DISTVERSION
当版本以字母或前缀开始
当版本以字母、前缀或后缀(这些不是版本的一部分)开始或结束时,使用 DISTVERSIONPREFIX
、DISTVERSION
和 DISTVERSIONSUFFIX
。
如果版本是 v1.2-4
:
有时,使用 GitHub 的项目会将其名称包含在版本中。例如,版本可能是 nekoto-1.2-4
:
这些项目有时还会在版本末尾使用某些字符串,例如 1.2-4_RELEASE
:
或者同时使用这两者,例如 nekoto-1.2-4_RELEASE
:
DISTVERSIONPREFIX
和 DISTVERSIONSUFFIX
在构建 PORTVERSION
时不会使用,只会用于 DISTNAME
。
所有这些都会生成 PORTVERSION
为 1.2.4
。
示例 4. 使用 DISTVERSION
当版本包含字母表示 "alpha"、"beta" 或 "pre-release"
当版本包含由点、破折号或下划线分隔的数字,且字母表示“alpha”、"beta" 或 "pre-release"(即,在没有字母的版本之前),使用 DISTVERSION
。
示例 5. 不使用 DISTVERSION
当版本包含字母表示 "Patch Level"
当版本包含字母,但这些字母不是表示“alpha”、"beta" 或 "pre"(而是表示“修补级别”),且表示的是在没有字母的版本之后,使用 PORTVERSION
。
① 1.2
在 1.2.p4
之后,这在这种情况下是 错误的。
② 1.2
在 1.2p4
之前,这是所需的。
PORTREVISION
和 PORTEPOCH
PORTREVISION
以下是需要增加 PORTREVISION
的示例:
添加补丁以修复安全漏洞、错误或为 Ports 添加新功能。
更改 Ports Makefile 以启用或禁用包中的编译时选项。
Ports 的共享库依赖项版本更新(在这种情况下,用户在安装依赖项的新版本后尝试安装旧包将失败,因为它会查找旧的 libfoo.x 而不是 libfoo.(x+1))。
对 Ports 分发文件进行的无声更改,且这些更改具有重要的功能差异。例如,对 distinfo
进行的更改,未更改 DISTVERSION
,但通过 diff -ru
命令对旧版和新版进行比较,代码中存在非平凡的差异。
更改 MAINTAINER
。
以下是一些不需要增加 PORTREVISION
的更改示例:
对 Ports 骨架的样式更改,没有影响最终包的功能。
更改 MASTER_SITES
或其他 Ports 的功能性更改,不会影响生成的包。
对分发文件进行微小的补丁,如拼写错误修正,这些不重要到需要用户进行升级。
构建修复,使得原本无法编译的包变得可编译。只要这些更改不会在以前能够构建的其他平台上引入功能性变化。由于 PORTREVISION
反映了包的内容,如果包之前无法构建,则不需要增加 PORTREVISION
来标记更改。
一个经验法则是决定是否提交到 Ports 的更改是某些人会受益的。不管是增强功能、修复问题,还是因为新包实际上会正常工作。然后,权衡这一点与这样一个事实,即这会导致所有定期更新 Ports 树的人被迫进行更新。如果是这样,就必须增加 PORTREVISION
。
注意
如果没有增加
PORTREVISION
,使用二进制包的人 永远 看不到更新。没有增加PORTREVISION
,包构建器无法检测到更改,因此无法重建包。
PORTEPOCH
有时,软件供应商或 FreeBSD Ports 维护者会做出一些不合逻辑的决定,发布一个实际上在数字上小于之前版本的版本。例如, Ports 可能从 foo-20000801
更新为 foo-1.0
(前者会被错误地视为更新版本,因为 20000801
在数字上大于 1
)。
技巧
>
输出表示版本0.031
被认为大于版本0.29
,这一点可能对 Ports 维护者来说并不显而易见。
在这种情况下,必须增加 PORTEPOCH
。如果 PORTEPOCH
非零,它会像前述章节中描述的那样附加到包名中。PORTEPOCH
绝不能减少或重置为零,因为这样会导致与先前 epoch 的包比较时出现问题。例如,这个包将无法被检测为过时。尽管新版本号 1.0,1
在数字上仍小于之前的版本 20000801
,但是 ,1
后缀会被自动化工具特殊处理并被视为大于先前包中的 ,0
后缀。
预计大多数 Ports 不会使用 PORTEPOCH
,通过合理使用 DISTVERSION
或谨慎使用 PORTVERSION
,通常可以避免在软件的未来版本更改版本结构时需要使用 PORTEPOCH
。然而,当供应商发布没有官方版本号的版本时(例如代码“快照”版本),FreeBSD Ports 维护者需要特别小心。由于有时会将版本标记为发布日期,这会在新“官方”版本发布时引起问题,正如上面的例子所示。
例如,如果在 20000917
发布了一个快照版本,而该软件的先前版本是 1.2
,则不应将 20000917
用作 DISTVERSION
。正确的做法是使用 1.2.20000917
作为 DISTVERSION
,或者类似的格式,这样后续版本(如 1.3
)仍然是数字上更大的版本。
PORTREVISION
和 PORTEPOCH
使用示例gtkmumble
Ports ,版本 0.10
,已提交到 Ports:
PKGNAME
变为 gtkmumble-0.10
。
发现了一个安全漏洞,需要一个本地的 FreeBSD 补丁。PORTREVISION
相应地增加。
PKGNAME
变为 gtkmumble-0.10_1
发布者发布了一个新版本,版本号为 0.2
(事实证明作者实际上想要的是 0.10
代表 0.1.0
,而不是“0.9 后的版本”——哎呀,现在已经太迟了)。由于新的次版本 2
在数字上小于之前的版本 10
,必须增加 PORTEPOCH
来手动强制将新包检测为“更新的”。由于这是代码的新版本发布,PORTREVISION
被重置为 0(或从 Makefile 中删除)。
PKGNAME
变为 gtkmumble-0.2,1
下一个版本是 0.3。由于 PORTEPOCH
不会减少,因此版本变量现在是:
PKGNAME
变为 gtkmumble-0.3,1
注意
如果在此升级中将
PORTEPOCH
重置为0
,那么安装了gtkmumble-0.10_1
包的用户将无法检测到gtkmumble-0.3
包为更新的版本,因为3
仍然小于10
。记住,这正是PORTEPOCH
的作用所在。
PKGNAMEPREFIX
和 PKGNAMESUFFIX
这些是命名包时要遵循的规范。目的是使包目录便于扫描,因为目前已经有成千上万个包,如果名称不规范,用户会因此离开!
包名的格式为 语言_地区-名称-编译特性.版本号
包名定义为 ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
。确保设置变量以符合该格式。
语言_地区-
FreeBSD 力求支持其用户的母语。当 Ports 专用于某种特定语言时,language-
部分是该语言的 ISO-639 两个字母缩写。例如,ja
表示日语,ru
表示俄语,vi
表示越南语,zh
表示中文,ko
表示韩语,de
表示德语。
如果 Ports 专用于某个特定地区的语言(例如,某种方言),则还应添加两位字母的国家代码。例如,en_US
表示美式英语,fr_CH
表示瑞士法语。
语言-
部分由 PKGNAMEPREFIX
设置。
有一个传统,就是为 Perl 5
模块命名时,前面加上 p5-
,并将双冒号分隔符转换为连字符。例如,Data::Dumper
模块变为 p5-Data-Dumper
。
-编译特性
部分由 PKGNAMESUFFIX
设置。
-.版本号
版本字符串跟随一个连字符(-
),并且是由整数和小写字母组成的由句点分隔的列表。特别地,版本字符串中不允许再有其他的连字符。唯一的例外是字符串 pl
(表示“补丁级别”),只能在软件没有主版本号和次版本号时使用。如果软件版本中包含类似“alpha”,“beta”,“rc”或“pre”之类的字符串,则取其首字母并直接放在句点后。如果版本字符串在这些名称后继续,则数字紧跟在单个字母后,不会有额外的句点(例如,1.0b2
)。
这样做的目的是为了便于通过版本字符串对 Ports 进行排序。特别地,确保版本号的各个部分始终由句点分隔,如果日期是版本字符串的一部分,则使用 dyyyy.mm.dd
格式,而不是 dd.mm.yyyy
或不符合 Y2K 的 yy.mm.dd
格式。如果版本前缀是字母,尤其是 d
(表示日期),这样可以防止版本号低于 yyyy
的发布。
重要
以下是一些(真实的)示例,展示了如何将软件作者指定的名称转换为合适的包名。每行只设置了 DISTVERSION
或 PORTVERSION
其中一个,取决于在 Ports 的 Makefile 中使用的是哪一个:
表 2. 包命名示例
mule-2.2.2
(空)
mule
(空)
2.2.2
无需更改
mule-1.0.1
(空)
mule
1
1.0.1
这是 mule 的版本 1,版本 2 已经存在
EmiClock-1.0.2
(空)
emiclock
(空)
1.0.2
单个程序名不能使用大写字母
rdist-1.3alpha
(空)
rdist
(空)
1.3alpha
版本将是 1.3.a
es-0.9-beta1
(空)
es
(空)
0.9-beta1
版本将是 0.9.b1
mailman-2.0rc3
(空)
mailman
(空)
2.0rc3
版本将是 2.0.r3
v3.3beta021.src
(空)
tiff
(空)
3.3
那到底是什么?
tvtwm
(空)
tvtwm
(空)
p11
文件名中没有版本号,使用上游给出的版本号
piewm
(空)
piewm
(空)
1.0
文件名中没有版本号,使用上游给出的版本号
xvgr-2.10pl1
(空)
xvgr
(空)
2.10.pl1
在这种情况下,pl1
表示补丁级别,因此不能使用 DISTVERSION
gawk-2.15.6
ja-
gawk
(空)
2.15.6
日语版本
psutils-1.13
(空)
psutils
-letter
1.13
在包构建时硬编码了纸张大小
pkfonts
(空)
pkfonts
300
1.0
300dpi 字体包
如果原始源代码中完全没有版本信息,并且原作者不太可能发布另一个版本,则将版本字符串设置为 1.0
(如上面 piewm
示例)。否则,询问原作者或使用源文件发布的日期字符串(dyyyy.mm.dd
,或 dyyyymmdd
)作为版本。
技巧
可以使用任何字母。这里的
d
代表日期,如果源是 Git 仓库,通常使用g
后跟提交日期,使用s
表示快照也是常见的。
CATEGORIES
以下是当前的 Port 分类列表。带有星号(*
)标记的是 虚拟 分类——这些分类在 Ports 树中没有对应的子目录,仅作为次要分类使用,并且仅用于搜索目的。
注意
对于非虚拟分类,每个子目录的 Makefile 中会有一行描述,描述该分类的作用。
accessibility
帮助残障用户的 Port。
afterstep*
arabic
阿拉伯语语言支持。
archivers
压缩工具。
astro
天文学相关的 Port。
audio
音频支持。
benchmarks
基准测试工具。
biology
生物学相关的软件。
cad
计算机辅助设计工具。
chinese
中文语言支持。
comms
通信软件。
主要是用于与串口通信的软件。
converters
字符编码转换工具。
databases
数据库相关的软件。
deskutils
曾经在计算机发明之前属于桌面上的工具。
devel
开发工具。
不要仅仅因为是库文件就把它们放在这个分类下。除非它们真正不属于其他分类,否则不应放在此分类。
dns
与 DNS 相关的软件。
docs*
FreeBSD 文档的元 Port。
editors
一般文本编辑器。
专用编辑器应放在特定工具的分类中。例如,数学公式编辑器应放在 math 分类中,并将 editors 作为第二分类。
education*
与教育相关的软件。
包括主要或大部分设计用于帮助用户学习特定主题或进行一般学习的应用程序、工具或游戏。还包括课程编写应用程序、课程交付应用程序以及课堂或学校管理应用程序。
elisp*
Emacs-lisp 的 Port。
emulators
其他操作系统的模拟器。
终端模拟器不应放在此分类中。基于 X 的模拟器应放入 x11 分类,基于文本的模拟器应放入 comms 或 misc,具体取决于功能。
enlightenment*
与 Enlightenment 窗口管理器相关的 Port。
finance
与货币、金融相关的应用程序。
french
法语语言支持。
ftp
FTP 客户端和服务器工具。
如果 Port 同时支持 FTP 和 HTTP,应将其放入 ftp 分类,并加上 www 作为第二分类。
games
游戏。
geography*
与地理相关的软件。
german
德语语言支持。
gnome*
gnustep*
与 GNUstep 桌面环境相关的软件。
graphics
图形工具。
hamradio*
无线电爱好者软件。
haskell*
与 Haskell 语言相关的软件。
hebrew
希伯来语语言支持。
hungarian
匈牙利语语言支持。
irc
互联网中继聊天工具。
japanese
日语语言支持。
java
与 Java™ 语言相关的软件。
java 分类不应是 Port 唯一的分类。除非是直接与 Java 语言相关的 Port,否则不鼓励使用 java 作为 Port 的主要分类。
kde*
kde-applications*
kde-frameworks*
kde-plasma*
kld*
可加载的内核模块。
korean
韩语语言支持。
lang
编程语言。
linux*
Linux 应用程序和支持工具。
lisp*
与 Lisp 语言相关的软件。
邮件软件。
mate*
与 MATE 桌面环境相关的 Port,GNOME 2 的一个分支。
math
数值计算软件及其他数学相关工具。
mbone*
MBone 应用程序。
misc
杂项工具。
不属于其他分类的工具。如果可能,尽量为 Port 找到更合适的分类,而不是放在 misc
中,因为该分类中的 Port 往往容易被忽视。
multimedia
多媒体软件。
net
各种网络软件。
net-im
即时通讯软件。
net-mgmt
网络管理软件。
net-p2p
点对点网络应用。
net-vpn*
虚拟私人网络应用。
news
USENET 新闻软件。
parallel*
处理计算中的并行性的应用程序。
pear*
与 Pear PHP 框架相关的 Port。
perl5*
需要 Perl 5 版本运行的 Port。
plan9*
polish
波兰语语言支持。
ports-mgmt
用于管理、安装和开发 FreeBSD Ports 和包的工具。
portuguese
葡萄牙语语言支持。
打印软件。
包括桌面出版工具(如预览器等)。
python*
ruby*
rubygems*
russian
俄语语言支持。
scheme*
与 Scheme 语言相关的软件。
science
不适合其他分类的科学相关 Ports,如 astro、biology 和 math。
security
安全工具。
shells
命令行 Shell。
spanish*
西班牙语语言支持。
sysutils
系统工具。
tcl*
使用 Tcl 运行的 Port。
textproc
文本处理工具。
不包括桌面出版工具,这些应放入 print 分类。
tk*
使用 Tk 运行的 Port。
ukrainian
乌克兰语语言支持。
vietnamese
越南语语言支持。
wayland*
支持 Wayland 显示服务器的 Port。
windowmaker*
支持 Window Maker 窗口管理器的 Port。
www
与万维网相关的软件。
HTML 语言支持也应归入此分类。
x11
X 窗口系统及其相关工具。
该分类仅适用于直接支持窗口系统的软件。不要将常规 X 应用程序放入此分类。大多数应放入其他 x11-* 子分类(见下文)。
x11-clocks
X11 时钟工具。
x11-drivers
X11 驱动程序。
x11-fm
X11 文件管理器。
x11-fonts
X11 字体和字体工具。
x11-servers
X11 服务器。
x11-themes
X11 主题。
x11-toolkits
X11 工具包。
x11-wm
X11 窗口管理器。
xfce*
zope*
由于许多分类有重叠,选择哪一个分类作为 Port 的主要分类可能会很繁琐。对此有几个规则。以下是按优先顺序递减的规则:
语言特定的分类总是优先。例如,如果该 Port 安装的是日语 X11 字体,则 CATEGORIES
行应写为 japanese x11-fonts。
特定的分类应列在不太具体的分类之前。例如,一个 HTML 编辑器应该列为 www editors,而不是反过来。并且,如果 Port 属于 irc、mail、news、security 或 www 中的任何一个分类时,不要列出 net,因为 net 已经隐含包含在内。
x11 仅在主要分类为自然语言时作为二级分类使用。特别是,不要将 x11 放在 X 应用程序的分类行中。
Emacs 模式应放置在与其支持的应用程序相同的 Ports 分类中,而不是放在 editors 中。例如,用于编辑某编程语言源文件的 Emacs 模式应放在 lang 分类下。
安装可加载内核模块的 Ports 也应在 CATEGORIES
行中包含虚拟分类 kld。这可以通过添加 USES=kmod
自动处理。
misc 不应与任何其他非虚拟分类一起使用。如果 CATEGORIES
中出现了 misc 和其他分类,那就意味着可以安全地删除 misc,并将 Port 只放在另一个子目录下。
如果该 Port 确实不属于任何其他分类,则将其放入 misc。
随着 Ports 的不断发展,已经引入了多个新分类。新分类可以是 虚拟 分类——即在 Ports 树中没有对应的子目录的分类——或者是 物理 分类——即有对应子目录的分类。本节讨论了创建新物理分类时涉及的问题。在提议新分类之前,请仔细阅读以下内容。
我们现有的做法是,除非有大量的 Port 明显属于该分类,或者这些 Port 是逻辑上独立的且属于一般兴趣有限的群体(例如与口语人类语言相关的分类),否则避免创建新的物理分类,最好是两者都满足。
以下是提出新物理分类的程序:
参与讨论。
如果看起来有支持这一想法的声音,请提交一个 PR,包含新分类的理由和需要迁移的现有 Ports 列表。理想情况下,PR 还应包括以下补丁:
新 Ports 的 Makefile,在它们被复制到新位置后
新分类的 Makefile
旧分类的 Makefile
依赖旧 Ports 的 Makefile
(额外的奖励,提供根据提交者指南中程序要求需要更改的其他文件)
提议新虚拟分类与上述类似,但要简单得多,因为实际上不需要迁移任何 Port。在这种情况下,PR 中仅需包含那些将新分类添加到受影响 Port 的 CATEGORIES
的补丁。
偶尔有人提议以 2 层结构或其他某种关键字结构重新组织分类。到目前为止,这些提议没有取得任何进展,因为虽然提出这些提议很容易,但将整个现有 Ports 进行任何形式的重组工作非常庞大,可以说是非常艰巨的任务。在发布此类想法之前,请阅读邮件列表档案中的这些提议的历史记录。此外,准备好接受挑战,提供一个有效的原型。
这两者都会生成 PORTVERSION
为 1.2.p4
,它在 1.2 之前。 可用于验证这一点:
在这种情况下,使用 DISTVERSION
是不可行的,因为它会生成 1.2.p4
的版本,这将排在 1.2
之前,而不是之后。 将验证这一点:
对于一些更高级的设置 PORTVERSION
示例,当软件的版本管理方式与 FreeBSD 的版本方案不兼容,或者当分发文件本身不包含版本时,参见 。
PORTREVISION
是一个单调递增的值,每次 DISTVERSION
增加时都会重置为 0,通常是在有新的官方供应商发布版本时。如果 PORTREVISION
非零,则该值会附加到包名中。PORTREVISION
的更改会被自动化工具(如 )用于确定新包是否可用。
每次对 Ports 进行更改,且该更改以某种方式影响生成的包时,都必须增加 PORTREVISION
。这包括仅影响具有非默认 的包的更改。
更改包的打包清单或安装时的行为。例如,修改生成初始数据的脚本,如 主机密钥。
版本号比较的结果并不总是显而易见的。可以使用 pkg version
(请参见 )来测试两个版本号字符串的比较。例如:
错误地丢弃或重置 PORTEPOCH
会导致不断的麻烦。如果上述讨论不够清晰,请参考 。
两个可选变量,PKGNAMEPREFIX
和 PKGNAMESUFFIX
,与 PORTNAME
和 PORTVERSION
结合,形成 PKGNAME
,其格式为 ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
。确保它符合我们的。特别地,PORTVERSION
中不允许使用连字符(-
)。此外,如果包名中有 language- 或 -compiled.specifics 部分(见下文),则分别使用 PKGNAMEPREFIX
和 PKGNAMESUFFIX
,不要将它们作为 PORTNAME
的一部分。
名称
确保 Ports 的名称和版本清晰地分开并放入 PORTNAME
和 DISTVERSION
中。PORTNAME
中包含版本部分的唯一原因是如果上游发行版确实是按该方式命名的,例如 或 Ports 。否则,PORTNAME
中不能包含任何版本特定的信息。多个 Ports 使用相同的 PORTNAME
是很常见的,就像 Ports 那样;在这种情况下,使用 PKGNAMEPREFIX
和 PKGNAMESUFFIX
值来区分不同的版本(以及不同的索引条目)。
-编译特性
如果 Ports 可以通过不同的 来构建(通常是某个 Ports 家族的目录名称的一部分),那么 -compiled.specifics
部分表示已编译的默认值。连字符是可选的。示例包括纸张大小和字体单位。
包名必须在整个 Ports 树中唯一,检查是否已经存在相同的 PORTNAME
,如果存在,则添加 之一。
当创建一个包时,它会被放置在 /usr/ports/packages/All 目录下,并且会从 /usr/ports/packages 的一个或多个子目录中创建链接。这些子目录的名称由变量 CATEGORIES
指定。这样做是为了方便用户在 FTP 站点或 CDROM 上浏览成千上万的包时更轻松。请查看 ,选择适合该 Port 的分类。
该列表还决定了 Port 在 Ports 树中的导入位置。如果有多个分类,Port 文件必须放在第一个分类名称的子目录中。更多关于如何选择正确分类的讨论,请参见 。
支持 窗口管理器的 Port。
来自 项目的 Port。
来自 项目的 Port(通用)。
来自 项目的应用程序。
项目的 Qt 编程附加库。
来自 项目的桌面环境。
来自 的各种程序。
与 语言相关的软件。
与 语言相关的软件。
包的 Port。
与 桌面环境相关的 Port。
支持。
第一个分类必须是物理分类(见)。这是为了使打包工作正常进行。虚拟分类和物理分类可以在之后混合使用。
如果分类不明确,请在在 bug 数据库中加入评论,供我们讨论在导入前进行讨论。作为提交者,请向 发送通知,以便我们先进行讨论。很多时候,新的 Ports 被导入到错误的分类中,之后又立即被移动。
这样做的原因是,这样的变更会给 带来相当大的工作量,特别是那些追踪 Ports 变化的用户。此外,提议的分类更改往往会引发争议。(也许这是因为对于分类何时“过大”以及分类是否应便于浏览(因此理想的分类数量是多少)等问题,缺乏明确的共识,等等。)
在 上提议新分类。提供详细的理由,说明现有分类不足之处,并列出拟迁移到该分类的现有 Ports。(如果有在 Bugzilla 中待处理的符合该分类的新 Ports,也请列出。)如果你是维护者和/或提交者,请提及这一点,因为这可能有助于你的提议。
由于它影响 Ports 基础设施,并涉及迁移和补丁许多 Ports,可能还需要在构建集群上运行回归测试,因此请将 PR 分配给 Ports 管理团队 。
如果该 PR 获得批准,提交者将需要按照 中概述的其余程序进行操作。