过滤出已安装的,最新版本的 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;
|
use crate::cli::Cli;
|
||||||
|
|
||||||
pub mod db;
|
pub mod db;
|
||||||
|
@ -35,5 +42,36 @@ fn repoter(cli: &Cli) -> crate::Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn summary(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(())
|
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<()> {
|
pub fn cumain() -> Result<()> {
|
||||||
let cli = cli::parse();
|
let cli = cli::parse();
|
||||||
|
// 初始化使用 rpm 默认配置
|
||||||
|
rpm_rs::configure();
|
||||||
|
|
||||||
analyzer::cuvat_run(&cli)
|
analyzer::cuvat_run(&cli)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user