#package-manager #pkgbuild #pacman #parser #parser-library

nomcup

用于解析由包管理器 pacman 使用的 PKGBUILD 文件的库

1 个不稳定版本

0.1.0 2021 年 1 月 16 日

#829Unix APIs

自定义许可证

47KB

NomCup

NomCup the mascot

这是一个 Rust 库,用于解析包管理器 pacman 使用的 PKGBUILD 文件。

命名的主要灵感来源有三个

  • namcap — 一个 Pacman 包分析器
  • nOm — 一个用于创建解析器的出色 Rust 库
  • rUst — 该库所使用的语言

现在它像一个饥饿的杯子,等着吞噬你 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.debpacops 应该能够理解这是一个远程源(不是包目录中的文件),它是一个 .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 或其他)。

链接

无运行时依赖