跳转到主要内容

sow where

在工作区的 Repository 与 Dist 中定位一个 Package Object。

sow where 用于回答工作区中哪些 Dist 仍包含某个 Package Object。它默认搜索全部 Repository, 只读且不获取写锁。

语法

sow where PACKAGE [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]
参数 含义 默认值
-C, --workdir DIR 工作区发现起点 当前目录
-r, --repo NAME 将搜索限制到一个 Repository 全部 Repository
-d, --dist NAME 将搜索限制到指定 Dist;可重复 全部 Dist
--json 输出 sow.cli/v1 Envelope false

引用解析

PACKAGEsow show 使用相同文法:SHA-256、规范 RPM/DEB 坐标、 完整文件名或裸包名。

解析范围是完整的所选工作区范围。裸包名必须标识唯一 Package Object;即使同名对象位于不同 Repository,也会产生歧义。使用 -r/-d 收窄范围,或提供精确坐标/SHA-256。

输出

不带 --json 时,where 先输出摘要,再为每个位置输出一行:

sow where 'rpm:centos-release-0:6-0.el6.centos.5.x86_64'
reference="rpm:centos-release-0:6-0.el6.centos.5.x86_64" locations=1
repository=demo coordinate="rpm:centos-release-0:6-0.el6.centos.5.x86_64" sha256:ffd9e7bdaa4884831a6c055ada01dac96b84c50a8d518dac409b445af5dadc16 dists=el9 built_dists=el9

每个位置同时给出 Desired dists 与当前 built_dists,可用于确认已移除或已替换版本是否仍对 客户端可见。

加上 --json 后,同一对象位于 result 下。引用不存在属于明确拒绝,而不是空成功:

sow where nosuchpkg
operation rejected: managed: operation rejected: package reference "nosuchpkg" was not found in the selected Workspace scope

示例

列出仍在提供某个精确版本的全部位置:

sow where 'rpm:patroni-0:3.0.4-1.noarch' --json |
  jq -r '.result.locations[] | "\(.repository)/\(.dists | join(","))"'

退出码

代码 触发条件
0 已输出一个解析后的 Package Object 及其位置
1 运行时 I/O 错误
2 用法错误或未发现工作区
5 某个 Repository 状态库不可读或不一致
6 显式 Repository/Dist 未配置,或引用没有匹配/在所选范围内有歧义

参见

  • sow show —— 查看解析后的 Package Object
  • sow ls —— 列出一个 Dist 集合
  • 包引用 —— 精确文法与歧义规则