27 个版本
新增 0.1.27 | 2024 年 8 月 24 日 |
---|---|
0.1.26 | 2024 年 8 月 21 日 |
0.1.16 | 2024 年 6 月 15 日 |
0.1.15 | 2019 年 9 月 23 日 |
0.1.7 | 2019 年 8 月 26 日 |
174 在 数据库接口 中排名
1,414 每月下载量
用于 mktool
200KB
3K SLoC
pkgsrc-rs
pkgsrc 包和 pkg_install pkgdb 的 Rust 接口。
该软件正在与 pm 一起开发,pm 是 pkgsrc 包管理器的 Rust 实现。所有处理底层 pkg_install 例程的代码都将放在这里。
示例
这是一个简单的 pkg_info(8)
实现,支持默认输出格式,即列出所有已安装的包及其单行注释。
use pkgsrc::{MetadataEntry, PkgDB};
use std::path::Path;
fn main() -> Result<(), std::io::Error> {
let pkgdb = PkgDB::open(Path::new("/var/db/pkg"))?;
for pkg in pkgdb {
let pkg = pkg?;
println!("{:20} {}",
pkg.pkgname(),
pkg.read_metadata(MetadataEntry::Comment)?
.trim()
);
}
Ok(())
}
状态
- 已实现并验证了 pkg_match(),对大量匹配输入进行了验证。
- 元数据处理存档中的 "+*" 文件,并能够验证存档中包含有效的包。
- PkgDB 处理本地 pkg 数据库,目前支持基于常规文件的仓库,但具有灵活的支持未来 sqlite3-backed 仓库的能力。
- 摘要处理 pkg_summary(5) 的解析和生成。
许可证
本项目采用 ISC 许可证。
测试/兼容性说明
生成依赖匹配列表。
sqlite3 /var/db/pkgin/pkgin.db 'SELECT remote_deps_dewey FROM remote_deps' | sort | uniq > pkgdeps.txt
生成包名列表
sqlite3 /var/db/pkgin/pkgin.db 'SELECT fullpkgname FROM remote_pkg' >pkgnames.txt
在 C 和 Rust 中实现以下算法并比较输出
while read pattern; do
while read pkg; do
pkg_match "${pattern}" "${pkg}"
printf "%s\t%s\t%s", ${pattern}, ${pkg}, $? >> outfile
done < pkgnames.txt
done < pkgdeps.txt
作为额外的好处,C 版本生成 158,916,879 个匹配需要 55 秒,而 Rust 版本需要 42 秒。
依赖
~4–13MB
~170K SLoC