1
0
mirror of https://github.com/Morganamilo/paru synced 2024-07-03 06:38:35 +00:00

Rework upgrades

This commit is contained in:
morganamilo 2023-10-14 14:07:55 +01:00
parent f5331d5f92
commit 1c7d7e5cd6
2 changed files with 39 additions and 71 deletions

View File

@ -9,7 +9,7 @@ use std::collections::{HashMap, HashSet};
use alpm::{AlpmList, Db};
use alpm_utils::DbListExt;
use anyhow::Result;
use aur_depends::{AurUpdates, PkgbuildUpdates, Resolver};
use aur_depends::{Resolver, Updates};
use futures::try_join;
use tr::tr;
@ -114,33 +114,43 @@ fn print_upgrade(
);
}
async fn get_aur_only_upgrades<'a, 'b>(
async fn get_resolver_upgrades<'a, 'b>(
config: &Config,
resolver: &mut Resolver<'a, 'b, RaurHandle>,
print: bool,
) -> Result<AurUpdates<'a>> {
if config.mode.aur() {
if print {
) -> Result<Updates<'a>> {
if print {
if config.mode.pkgbuild() {
let c = config.color;
println!(
"{} {}",
c.action.paint("::"),
c.bold.paint(tr!("Looking for AUR upgrades..."))
c.bold.paint(tr!("Looking for PKGBUILD upgrades..."))
);
if config.mode.aur() {
let c = config.color;
println!(
"{} {}",
c.action.paint("::"),
c.bold.paint(tr!("Looking for AUR upgrades..."))
);
}
}
let updates = match config.repos {
LocalRepos::None => resolver.aur_updates().await?,
let dbs = match config.repos {
LocalRepos::None => None,
_ => {
let (_, dbs) = repo::repo_aur_dbs(config);
let dbs = dbs.iter().map(|db| db.name()).collect::<Vec<_>>();
resolver.local_aur_updates(&dbs).await?
let dbs = Some(dbs.into_iter().map(|db| db.name()).collect::<Vec<_>>());
dbs
}
};
let updates = resolver.updates(dbs.as_deref()).await?;
Ok(updates)
} else {
Ok(AurUpdates::default())
Ok(Updates::default())
}
}
@ -165,52 +175,21 @@ pub async fn net_upgrades<'res, 'conf>(
config: &'conf Config,
resolver: &mut Resolver<'res, '_, RaurHandle>,
print: bool,
) -> Result<(AurUpdates<'res>, Vec<String>)> {
) -> Result<(Updates<'res>, Vec<String>)> {
try_join!(
get_aur_only_upgrades(config, resolver, print),
get_resolver_upgrades(config, resolver, print),
get_devel_upgrades(config, print)
)
}
fn pkgbuild_upgrades<'a>(
config: &Config,
resolver: &mut Resolver<'a, '_, RaurHandle>,
print: bool,
) -> Result<PkgbuildUpdates<'a>> {
if config.mode.pkgbuild() {
if print {
let c = config.color;
println!(
"{} {}",
c.action.paint("::"),
c.bold.paint(tr!("Looking for PKGBUILD upgrades..."))
);
}
let updates = match config.repos {
LocalRepos::None => resolver.pkgbuild_updates()?,
_ => {
let (_, dbs) = repo::repo_aur_dbs(config);
let dbs = dbs.iter().map(|db| db.name()).collect::<Vec<_>>();
resolver.local_pkgbuild_updates(&dbs)?
}
};
Ok(updates)
} else {
Ok(PkgbuildUpdates::default())
}
}
pub async fn get_upgrades<'a, 'b>(
config: &Config,
resolver: &mut Resolver<'a, 'b, RaurHandle>,
) -> Result<Upgrades> {
let (aur_upgrades, devel_upgrades) = net_upgrades(config, resolver, true).await?;
let (upgrades, devel_upgrades) = net_upgrades(config, resolver, true).await?;
let (syncdbs, aurdbs) = repo::repo_aur_dbs(config);
let pkgbuild_updates = pkgbuild_upgrades(config, resolver, true)?;
for pkg in aur_upgrades.ignored {
for pkg in upgrades.ignored_aur {
eprintln!(
"{} {}",
config.color.warning.paint(tr!("warning:")),
@ -223,7 +202,7 @@ pub async fn get_upgrades<'a, 'b>(
);
}
for pkg in pkgbuild_updates.ignored {
for pkg in upgrades.ignored_pkgbuild {
eprintln!(
"{} {}",
config.color.warning.paint(tr!("warning:")),
@ -236,7 +215,8 @@ pub async fn get_upgrades<'a, 'b>(
);
}
let mut aur_upgrades = aur_upgrades.updates;
let mut aur_upgrades = upgrades.aur_updates;
let pkgbuild_upgrades = upgrades.pkgbuild_updates;
let mut devel_upgrades =
filter_devel_updates(config, resolver.get_cache_mut(), &devel_upgrades).await?;
@ -248,6 +228,7 @@ pub async fn get_upgrades<'a, 'b>(
devel_upgrades.sort();
devel_upgrades.dedup();
// TODO better devel pkgbuild
aur_upgrades.retain(|u| !devel_upgrades.iter().any(|t| t.pkg == u.remote.name));
let mut repo_skip = Vec::new();
@ -267,7 +248,7 @@ pub async fn get_upgrades<'a, 'b>(
if devel_upgrades.is_empty()
&& aur_upgrades.is_empty()
&& repo_upgrades.is_empty()
&& pkgbuild_updates.updates.is_empty()
&& pkgbuild_upgrades.is_empty()
{
return Ok(Upgrades::default());
}
@ -278,8 +259,7 @@ pub async fn get_upgrades<'a, 'b>(
.map(|p| p.remote.name.clone())
.collect::<Vec<_>>();
let mut pkgbuild_updates = pkgbuild_updates
.updates
let mut pkgbuild_updates = pkgbuild_upgrades
.iter()
.map(|u| (u.repo.clone(), u.local.name().to_string()))
.collect::<Vec<_>>();
@ -308,10 +288,8 @@ pub async fn get_upgrades<'a, 'b>(
let db = config.alpm.localdb();
let n_max = repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len();
let n_max = n_max.to_string().len();
let mut index = repo_upgrades.len()
+ aur_upgrades.len()
+ devel_upgrades.len()
+ pkgbuild_updates.updates.len();
let mut index =
repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len() + pkgbuild_upgrades.len();
let db_pkg_max = repo_upgrades
.iter()
@ -327,8 +305,7 @@ pub async fn get_upgrades<'a, 'b>(
.map(|u| db_len(&u.pkg, "devel", &aurdbs)),
)
.chain(
pkgbuild_updates
.updates
pkgbuild_upgrades
.iter()
.map(|u| db_len(u.local.name(), &u.repo, &aurdbs)),
)
@ -345,12 +322,7 @@ pub async fn get_upgrades<'a, 'b>(
.filter_map(|p| db.pkg(p.pkg.as_str()).ok())
.map(|p| p.version().len()),
)
.chain(
pkgbuild_updates
.updates
.iter()
.map(|p| p.local.version().len()),
)
.chain(pkgbuild_upgrades.iter().map(|p| p.local.version().len()))
.max()
.unwrap_or(0);
@ -412,7 +384,7 @@ pub async fn get_upgrades<'a, 'b>(
index -= 1;
}
for pkg in pkgbuild_updates.updates.iter().rev().rev() {
for pkg in pkgbuild_upgrades.iter().rev().rev() {
let remote = aurdbs
.pkg(pkg.local.name())
.map(|p| format!("{}-{}", p.db().unwrap().name(), pkg.repo));
@ -434,10 +406,8 @@ pub async fn get_upgrades<'a, 'b>(
let input = input(config, &tr!("Packages to exclude (eg: 1 2 3, 1-3):"));
let input = input.trim();
let number_menu = NumberMenu::new(input);
let mut index = repo_upgrades.len()
+ aur_upgrades.len()
+ devel_upgrades.len()
+ pkgbuild_updates.updates.len();
let mut index =
repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len() + pkgbuild_upgrades.len();
for pkg in repo_upgrades.iter().rev().rev() {
let remote = syncdbs.pkg(pkg.name()).unwrap();
@ -483,7 +453,7 @@ pub async fn get_upgrades<'a, 'b>(
index -= 1;
}
for pkg in pkgbuild_updates.updates.iter().rev().rev() {
for pkg in pkgbuild_upgrades.iter().rev().rev() {
let remote = aurdbs
.pkg(pkg.local.name())
.map(|p| p.db().unwrap().name())

View File

@ -35,8 +35,6 @@ async fn run(run_args: &[&str], repo: bool) -> Result<(TempDir, i32)> {
.status()?;
assert!(status.success());
if repo {
let status = Command::new("cp")
.arg("-r")