1 个不稳定版本
0.1.0 | 2021 年 1 月 16 日 |
---|
#829 在 Unix APIs
47KB
NomCup
这是一个 Rust 库,用于解析包管理器 pacman 使用的 PKGBUILD
文件。
命名的主要灵感来源有三个
现在它像一个饥饿的杯子,等着吞噬你 PKGBUILD
中的所有标记。
目标
- 将 PKGBUILD 文件解析成合理的 Rust 结构
- 理解和渲染变量
- 生成一个具有原始格式的文件
次要目标
- 生成一个具有主观格式的文件
- 提供警告和建议
注释
该库是为在 pacops
工具中提供与 PKGBUILD 交互的正确方式而创建的。 pacops
的一个关键功能是更新包。以 microsoft-edge-dev-bin 为例。它有一个包含 source
数组的 https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/${_pkgname}_${pkgver}-1_amd64.deb
。 pacops
应该能够理解这是一个远程源(不是包目录中的文件),它是一个 .deb
文件。如果它是一个 .deb
文件,这意味着它可能是一个仓库,因此它应该尝试获取仓库中的文件列表。从文件名,它应该能够知道它们的版本并与当前版本进行比较。如果发现新版本, pacops
应该更新 PKGBUILD 中的版本和哈希字段。
我们不需要在这个库中包含此功能,但我们必须提供一个合理的接口,以便在 pacops
中轻松实现。
想法
在实现之前应该讨论以下内容
在 Rust 结构旁边存储标记树
为开发者提供一个易于使用的界面是一件好事,但关于“原始格式”的目标有些不同。这意味着仅仅解析PKGBUILD然后以一般方式重建是不够的。我不确定它的工作效果如何,但在解析的过程中,我们正在构建一个表示格式的标记树。可能只需要修改相关部分,就可以从这个树中重建文件。
元数据
解析结果将类似于 .SRCINFO
,这意味着所有值都已经渲染。
https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/${_pkgname}_${pkgver}-1_amd64.deb
将看起来像这样
https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_89.0.760.0-1_amd64.deb
虽然这使得链接可以作为链接使用,但现在更难以理解版本在其中。也许当我们知道链接是如何构建的时候,更容易通过仓库。为此,我们可以通过我们的API以多种方式表示源:渲染的,带有指向 PKGBUILD
变量的模板。或者类似的东西。
在版本中查找版本和pkgname的出现是可能的,但可能会有一些额外的逻辑(如 -git 或其他)。