Compare commits
2 Commits
e5b9f185c5
...
a7f2a4ead0
Author | SHA1 | Date | |
---|---|---|---|
a7f2a4ead0 | |||
bb88e5f0b8 |
|
@ -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" }
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user