成员策略
用 Dist 策略排除不需要的包,并限制索引中的版本数量。在 sow.yml 中配置
exclude 和 limit:
SOW 先执行 exclude,再执行 limit。add、rm 和 build 都会对所选 Dist 的完整候选
成员集合应用策略。编辑策略后,先运行 sow config check,再运行 sow build,
使现有成员符合新规则。
排除软件包
每条规则包含一个或多个字段。规则内的所有字段都要匹配;一个字段内,任一模式匹配即可。 任一规则匹配时,SOW 排除该软件包。
此配置在所有架构上排除列出的包类型,同时排除名称以 test- 开头或以
-experimental 结尾的 aarch64 包。
| 字段 | 匹配的包属性 |
|---|---|
name |
二进制包名 |
source |
规范化的源码包名 |
arch |
x86_64、aarch64 或 neutral |
kind |
下表中的包类型 |
format |
rpm 或 deb |
模式区分大小写,支持精确字符串和 shell 通配符 *、?、[...],不支持正则表达式、
版本比较或取反。空规则、空模式、首尾有空白的模式、同字段重复模式和非法通配符都是配置错误。
SOW 根据二进制包名确定 kind:
| 格式 | 包名后缀 | kind |
|---|---|---|
| RPM | -debuginfo |
debuginfo |
| RPM | -debugsource |
debugsource |
| RPM | -llvmjit |
llvmjit |
| DEB | -dbgsym |
dbgsym |
| DEB | -dbg |
dbg |
| 任意 | 没有匹配后缀 | main |
用 sow show PACKAGE --json 查看计算出的类型。SOW 不会按此表校验模式值:
kind: [debug] 是合法配置,但不会匹配任何包类型。
限制版本数量
limit 按二进制包名和规范架构族分组。架构无关包(noarch 或 all)单独成组。
| 值 | 结果 |
|---|---|
0 |
保留所有版本,默认值 |
正整数 N |
每组保留最新的 N 个版本 |
| 负数 | 配置错误 |
RPM 使用原生 rpmvercmp 的 epoch-version-release 排序(包含 ~ 预发布与 ^ 后置快照算符,2.0~rc1 < 2.0 < 2.0^20250611 < 2.0.1),DEB 使用原生 Debian 版本排序,从不按普通字符串排序。
limit: 2 时,向已有版本 1、2 的 Dist 加入版本 3,会在同一次操作中移除版本 1 的成员关系。
即使包名相同,x86_64 包与 noarch 包也属于不同分组。
读取策略结果
输入包被所有选中 Dist 排除时,整体状态为 excluded。各 Dist 的结果中,
excluded 表示命中排除规则,limited 表示超过版本数量限制。
策略排除不计为输入失败,也不会因此使命令失败。
一个 Dist 可以接受某个包,同时另一个 Dist 排除它。没有 Dist 接受新包时, SOW 不会为它保存一个无成员关系的包对象。
恢复已移除的版本
放宽策略不会恢复旧成员。提高 limit、删除排除规则或移除最新版本,只会改变当前及后续
候选包的处理结果。要恢复某个版本,请重新加入其包文件:
策略移除的是成员关系,不是包字节。已构建或保留的构建快照可能仍引用该包,使其继续留在包池。
用 sow gc 回收无引用对象;对已发布目标使用 sow gc TARGET。
预览移除结果
预览只报告成员移除和预期文件变化,不写入状态。把文件列表视为完整计划前,请检查 JSON 中
的 prediction_complete。--check 不能与 --skip、--timeout 或 --no-wait 同用。