Compare commits

...

2 Commits

Author SHA1 Message Date
a7f2a4ead0 add: package2rpminfo
Signed-off-by: Jia Chao <jiachao2130@126.com>
2024-09-18 10:05:40 +08:00
bb88e5f0b8 update: _dnf_summary
Signed-off-by: Jia Chao <jiachao2130@126.com>
2024-09-12 10:52:27 +08:00
2 changed files with 34 additions and 0 deletions

View File

@ -16,3 +16,4 @@ updateinfo-xmlparser = { git = "https://git.zhgsun.com:8089/jiachao2130/updatein
cvrf-xmlparser = { git = "https://git.zhgsun.com:8089/jiachao2130/cvrf-xmlparser.git", version = "0.1.0" }
rpm-rs = { git = "https://git.zhgsun.com:8089/jiachao2130/rpm-rs.git", version = "0.1.0" }
lazy_static = { version = "1.5" }
ccutils = { git = "https://git.zhgsun.com:8089/jiachao2130/ccutils.git", version = "0.1.0" }

View File

@ -1,6 +1,8 @@
use std::collections::{HashMap, HashSet};
use std::process::Command;
use std::str::FromStr;
use ccutils::cmd::IsOk;
use cvrf_xmlparser::{Severity, CUSA};
use lazy_static::lazy_static;
use rpm_rs::rpm::{get_installed_packages, Package};
@ -338,6 +340,16 @@ fn summary(cli: &Cli) -> crate::Result<()> {
}
fn _dnf_summary(_cli: &Cli) -> crate::Result<()> {
let cmd = Command::new("dnf")
.arg("updateinfo")
.output()
.expect("执行 `dnf udpateinfo` 命令失败");
match cmd.result() {
Ok(res) => println!("{res}"),
Err(err) => eprintln!("{err}"),
}
Ok(())
}
@ -394,6 +406,7 @@ fn _reporter() -> crate::Result<Reporter> {
}
// 对比两个 rpm Package 的版本,返回最新的一个
// TODO: 使用 RpmInfo 作为对比对象
fn rpmdb_package_vercmp(pa: Package, pb: Package) -> Package {
// 首先进行 epoch 的比较
match (pa.epoch(), pb.epoch()) {
@ -408,3 +421,23 @@ fn rpmdb_package_vercmp(pa: Package, pb: Package) -> Package {
return pb;
}
}
// 将 RPMDB 里的 Package 转换为 RpmInfo方便统一进行版本对比和处理。
fn package2rpminfo(pkg: Package) -> RpmInfo {
let mut rpminfo = RpmInfo::new();
// 目前只需要将 name/epoch/version/release/arch 几项填充即可
rpminfo.set("name", pkg.name().to_string());
// Option<i32> => String
if let Some(epoch) = pkg.epoch() {
rpminfo.set("epoch", epoch.to_string());
}
rpminfo.set("version", pkg.version().to_string());
rpminfo.set("release", pkg.release().to_string());
// Option<&str> => String
if let Some(arch) = pkg.arch() {
rpminfo.set("arch", arch.to_string());
}
rpminfo
}