过滤出已安装的,最新版本的 rpm 包
Signed-off-by: Jia Chao <jiachao2130@126.com>
This commit is contained in:
parent
f7374af85c
commit
b4c6fe6a01
|
@ -1,3 +1,10 @@
|
|||
use rpm_rs::rpm::{
|
||||
get_installed_packages,
|
||||
Package,
|
||||
};
|
||||
|
||||
use rpm_rs::rpmio::rpmvercmp;
|
||||
|
||||
use crate::cli::Cli;
|
||||
|
||||
pub mod db;
|
||||
|
@ -35,5 +42,36 @@ fn repoter(cli: &Cli) -> crate::Result<()> {
|
|||
}
|
||||
|
||||
fn summary(cli: &Cli) -> crate::Result<()> {
|
||||
// 当前系统所有已安装的 rpm 包
|
||||
let installed = get_installed_packages();
|
||||
// installed 已被消费掉
|
||||
// latest_installed 是所有最新版本软件包的 Vec
|
||||
let latest_installed: Vec<Package> = installed.into_iter().map(|(_, pkgs)| {
|
||||
let mut latest = pkgs[0].clone();
|
||||
for pkg in pkgs.into_iter() {
|
||||
latest = rpmdb_package_vercmp(latest, pkg);
|
||||
}
|
||||
latest
|
||||
}).collect();
|
||||
|
||||
// 列出所有已安装的软件包
|
||||
// latest_installed.iter().for_each(|pkg| println!("{}", pkg.nevra()));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// 对比两个 rpm Package 的版本,返回最新的一个
|
||||
fn rpmdb_package_vercmp(pa: Package, pb: Package) -> Package {
|
||||
// 首先进行 epoch 的比较
|
||||
match (pa.epoch(), pb.epoch()) {
|
||||
(Some(_), None) => return pa,
|
||||
(None, Some(_)) => return pb,
|
||||
_ => {}, // 继续往下对比
|
||||
}
|
||||
|
||||
if rpmvercmp(&pa.evr(), &pb.evr()) > 0 {
|
||||
return pa
|
||||
} else {
|
||||
return pb
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,5 +11,8 @@ pub type Result<T> = std::result::Result<T, Error>;
|
|||
|
||||
pub fn cumain() -> Result<()> {
|
||||
let cli = cli::parse();
|
||||
// 初始化使用 rpm 默认配置
|
||||
rpm_rs::configure();
|
||||
|
||||
analyzer::cuvat_run(&cli)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user