mirror of
https://github.com/Morganamilo/paru
synced 2024-07-05 15:38:36 +00:00
Rework upgrades
This commit is contained in:
parent
f5331d5f92
commit
1c7d7e5cd6
108
src/upgrade.rs
108
src/upgrade.rs
|
@ -9,7 +9,7 @@ use std::collections::{HashMap, HashSet};
|
||||||
use alpm::{AlpmList, Db};
|
use alpm::{AlpmList, Db};
|
||||||
use alpm_utils::DbListExt;
|
use alpm_utils::DbListExt;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use aur_depends::{AurUpdates, PkgbuildUpdates, Resolver};
|
use aur_depends::{Resolver, Updates};
|
||||||
use futures::try_join;
|
use futures::try_join;
|
||||||
use tr::tr;
|
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,
|
config: &Config,
|
||||||
resolver: &mut Resolver<'a, 'b, RaurHandle>,
|
resolver: &mut Resolver<'a, 'b, RaurHandle>,
|
||||||
print: bool,
|
print: bool,
|
||||||
) -> Result<AurUpdates<'a>> {
|
) -> Result<Updates<'a>> {
|
||||||
if config.mode.aur() {
|
if print {
|
||||||
if print {
|
if config.mode.pkgbuild() {
|
||||||
let c = config.color;
|
let c = config.color;
|
||||||
println!(
|
println!(
|
||||||
"{} {}",
|
"{} {}",
|
||||||
c.action.paint("::"),
|
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 {
|
let dbs = match config.repos {
|
||||||
LocalRepos::None => resolver.aur_updates().await?,
|
LocalRepos::None => None,
|
||||||
_ => {
|
_ => {
|
||||||
let (_, dbs) = repo::repo_aur_dbs(config);
|
let (_, dbs) = repo::repo_aur_dbs(config);
|
||||||
let dbs = dbs.iter().map(|db| db.name()).collect::<Vec<_>>();
|
let dbs = Some(dbs.into_iter().map(|db| db.name()).collect::<Vec<_>>());
|
||||||
resolver.local_aur_updates(&dbs).await?
|
dbs
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let updates = resolver.updates(dbs.as_deref()).await?;
|
||||||
|
|
||||||
Ok(updates)
|
Ok(updates)
|
||||||
} else {
|
} else {
|
||||||
Ok(AurUpdates::default())
|
Ok(Updates::default())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,52 +175,21 @@ pub async fn net_upgrades<'res, 'conf>(
|
||||||
config: &'conf Config,
|
config: &'conf Config,
|
||||||
resolver: &mut Resolver<'res, '_, RaurHandle>,
|
resolver: &mut Resolver<'res, '_, RaurHandle>,
|
||||||
print: bool,
|
print: bool,
|
||||||
) -> Result<(AurUpdates<'res>, Vec<String>)> {
|
) -> Result<(Updates<'res>, Vec<String>)> {
|
||||||
try_join!(
|
try_join!(
|
||||||
get_aur_only_upgrades(config, resolver, print),
|
get_resolver_upgrades(config, resolver, print),
|
||||||
get_devel_upgrades(config, 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>(
|
pub async fn get_upgrades<'a, 'b>(
|
||||||
config: &Config,
|
config: &Config,
|
||||||
resolver: &mut Resolver<'a, 'b, RaurHandle>,
|
resolver: &mut Resolver<'a, 'b, RaurHandle>,
|
||||||
) -> Result<Upgrades> {
|
) -> 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 (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!(
|
eprintln!(
|
||||||
"{} {}",
|
"{} {}",
|
||||||
config.color.warning.paint(tr!("warning:")),
|
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!(
|
eprintln!(
|
||||||
"{} {}",
|
"{} {}",
|
||||||
config.color.warning.paint(tr!("warning:")),
|
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 =
|
let mut devel_upgrades =
|
||||||
filter_devel_updates(config, resolver.get_cache_mut(), &devel_upgrades).await?;
|
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.sort();
|
||||||
devel_upgrades.dedup();
|
devel_upgrades.dedup();
|
||||||
|
// TODO better devel pkgbuild
|
||||||
aur_upgrades.retain(|u| !devel_upgrades.iter().any(|t| t.pkg == u.remote.name));
|
aur_upgrades.retain(|u| !devel_upgrades.iter().any(|t| t.pkg == u.remote.name));
|
||||||
|
|
||||||
let mut repo_skip = Vec::new();
|
let mut repo_skip = Vec::new();
|
||||||
|
@ -267,7 +248,7 @@ pub async fn get_upgrades<'a, 'b>(
|
||||||
if devel_upgrades.is_empty()
|
if devel_upgrades.is_empty()
|
||||||
&& aur_upgrades.is_empty()
|
&& aur_upgrades.is_empty()
|
||||||
&& repo_upgrades.is_empty()
|
&& repo_upgrades.is_empty()
|
||||||
&& pkgbuild_updates.updates.is_empty()
|
&& pkgbuild_upgrades.is_empty()
|
||||||
{
|
{
|
||||||
return Ok(Upgrades::default());
|
return Ok(Upgrades::default());
|
||||||
}
|
}
|
||||||
|
@ -278,8 +259,7 @@ pub async fn get_upgrades<'a, 'b>(
|
||||||
.map(|p| p.remote.name.clone())
|
.map(|p| p.remote.name.clone())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let mut pkgbuild_updates = pkgbuild_updates
|
let mut pkgbuild_updates = pkgbuild_upgrades
|
||||||
.updates
|
|
||||||
.iter()
|
.iter()
|
||||||
.map(|u| (u.repo.clone(), u.local.name().to_string()))
|
.map(|u| (u.repo.clone(), u.local.name().to_string()))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
@ -308,10 +288,8 @@ pub async fn get_upgrades<'a, 'b>(
|
||||||
let db = config.alpm.localdb();
|
let db = config.alpm.localdb();
|
||||||
let n_max = repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len();
|
let n_max = repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len();
|
||||||
let n_max = n_max.to_string().len();
|
let n_max = n_max.to_string().len();
|
||||||
let mut index = repo_upgrades.len()
|
let mut index =
|
||||||
+ aur_upgrades.len()
|
repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len() + pkgbuild_upgrades.len();
|
||||||
+ devel_upgrades.len()
|
|
||||||
+ pkgbuild_updates.updates.len();
|
|
||||||
|
|
||||||
let db_pkg_max = repo_upgrades
|
let db_pkg_max = repo_upgrades
|
||||||
.iter()
|
.iter()
|
||||||
|
@ -327,8 +305,7 @@ pub async fn get_upgrades<'a, 'b>(
|
||||||
.map(|u| db_len(&u.pkg, "devel", &aurdbs)),
|
.map(|u| db_len(&u.pkg, "devel", &aurdbs)),
|
||||||
)
|
)
|
||||||
.chain(
|
.chain(
|
||||||
pkgbuild_updates
|
pkgbuild_upgrades
|
||||||
.updates
|
|
||||||
.iter()
|
.iter()
|
||||||
.map(|u| db_len(u.local.name(), &u.repo, &aurdbs)),
|
.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())
|
.filter_map(|p| db.pkg(p.pkg.as_str()).ok())
|
||||||
.map(|p| p.version().len()),
|
.map(|p| p.version().len()),
|
||||||
)
|
)
|
||||||
.chain(
|
.chain(pkgbuild_upgrades.iter().map(|p| p.local.version().len()))
|
||||||
pkgbuild_updates
|
|
||||||
.updates
|
|
||||||
.iter()
|
|
||||||
.map(|p| p.local.version().len()),
|
|
||||||
)
|
|
||||||
.max()
|
.max()
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
|
|
||||||
|
@ -412,7 +384,7 @@ pub async fn get_upgrades<'a, 'b>(
|
||||||
index -= 1;
|
index -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for pkg in pkgbuild_updates.updates.iter().rev().rev() {
|
for pkg in pkgbuild_upgrades.iter().rev().rev() {
|
||||||
let remote = aurdbs
|
let remote = aurdbs
|
||||||
.pkg(pkg.local.name())
|
.pkg(pkg.local.name())
|
||||||
.map(|p| format!("{}-{}", p.db().unwrap().name(), pkg.repo));
|
.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(config, &tr!("Packages to exclude (eg: 1 2 3, 1-3):"));
|
||||||
let input = input.trim();
|
let input = input.trim();
|
||||||
let number_menu = NumberMenu::new(input);
|
let number_menu = NumberMenu::new(input);
|
||||||
let mut index = repo_upgrades.len()
|
let mut index =
|
||||||
+ aur_upgrades.len()
|
repo_upgrades.len() + aur_upgrades.len() + devel_upgrades.len() + pkgbuild_upgrades.len();
|
||||||
+ devel_upgrades.len()
|
|
||||||
+ pkgbuild_updates.updates.len();
|
|
||||||
|
|
||||||
for pkg in repo_upgrades.iter().rev().rev() {
|
for pkg in repo_upgrades.iter().rev().rev() {
|
||||||
let remote = syncdbs.pkg(pkg.name()).unwrap();
|
let remote = syncdbs.pkg(pkg.name()).unwrap();
|
||||||
|
@ -483,7 +453,7 @@ pub async fn get_upgrades<'a, 'b>(
|
||||||
index -= 1;
|
index -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for pkg in pkgbuild_updates.updates.iter().rev().rev() {
|
for pkg in pkgbuild_upgrades.iter().rev().rev() {
|
||||||
let remote = aurdbs
|
let remote = aurdbs
|
||||||
.pkg(pkg.local.name())
|
.pkg(pkg.local.name())
|
||||||
.map(|p| p.db().unwrap().name())
|
.map(|p| p.db().unwrap().name())
|
||||||
|
|
|
@ -35,8 +35,6 @@ async fn run(run_args: &[&str], repo: bool) -> Result<(TempDir, i32)> {
|
||||||
.status()?;
|
.status()?;
|
||||||
assert!(status.success());
|
assert!(status.success());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if repo {
|
if repo {
|
||||||
let status = Command::new("cp")
|
let status = Command::new("cp")
|
||||||
.arg("-r")
|
.arg("-r")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user