跳到主要内容

补丁

这个文档讲述了 openRuyi 的补丁策略。

通常策略

所有在 spec 文件中引用的补丁在其上方都应当有一行注释。这行注释可以是包含该补丁文件的作用,也可以是上游链接。

补丁文件命名策略

所有补丁文件应该以四位数字开头,这四位数分别代表不同类型的补丁文件:

  • 来自同一版本的 upstream 的补丁声明范围为 0001-0999。

  • CVE 修复及上游其它版本 backport 补丁,声明范围为 1000-1999。

  • openRuyi 特有,或者尚未提交 upstream,以及已提交但尚未被 upstream 接受的补丁,声明范围为 2000-2999。

如此类补丁被提交 upstream,该补丁在 spec 内应该有提交信息相关的注释 (例如 Pull Request 链接);被 upstream 合并后,原则上不因状态变化而重命名。

使用单 Patch 字段

Patch 字段应写在 BuildOption 字段(如果有)或者 BuildRequires 字段的上方。

# https://github.com/pypa/wheel/pull/655
Patch0: 0001-adjusts-tests-for-setuptools-78.patch

如果你愿意的话,可以同时添加注释并附上链接:

# Upstream has removed this code entirely instead
# https://github.com/pypa/wheel/pull/655
Patch0: 0001-adjusts-tests-for-setuptools-78.patch

使用 %patchlist 字段

如果有大于 3 个 patch,则不宜使用 Patch 字段,可直接定义 %patchlist 即可。如果定义 %patchlist,需要将列表放置于 %description 的上方。详见这里

%patchlist
# Fix executable space protection patch, upstream plans to do this
0001-unzip-6.0-exec-shield.patch
# http://www.info-zip.org/board/board.pl?m-1259575993/
0002-unzip-6.0-attribs-overflow.patch
# ...
# covscan issues
0020-unzip-6.0-COVSCAN-fix-unterminated-string.patch

应用补丁

在 openRuyi 的构建系统中。通常不需要手动应用补丁,构建系统会在 prep 阶段自动应用补丁。

默认情况下,补丁路径剥离层级为 -p1,通常适用于 git format-patch 生成的补丁。这类补丁通常包含 a/b/ 路径前缀。

只有当默认准备阶段不能满足需要时,才应使用 BuildOption(prep) 传入额外参数。例如,补丁路径已经以源码根目录下的相对路径开头时,应显式使用 -p0

BuildOption(prep):  -p0

只有在补丁必须以特殊方式处理,且无法用声明式字段表达时,才应手写 %prep 并手动应用补丁。并且必须在 spec 中注释原因。