You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.8 KiB
Rust
96 lines
2.8 KiB
Rust
use crate::args::UpgradeArgs;
|
|
use crate::builder::pacman::{PacmanColor, PacmanQueryBuilder, PacmanUpgradeBuilder};
|
|
use crate::internal::detect;
|
|
use crate::internal::error::SilentUnwrap;
|
|
use crate::internal::exit_code::AppExitCode;
|
|
use crate::internal::rpc::rpcinfo;
|
|
use crate::operations::aur_install::aur_install;
|
|
use crate::{fl, prompt, Options};
|
|
|
|
/// Upgrades all installed packages
|
|
#[tracing::instrument(level = "trace")]
|
|
pub async fn upgrade(args: UpgradeArgs, options: Options) {
|
|
if args.repo {
|
|
upgrade_repo(options).await;
|
|
}
|
|
if args.aur {
|
|
upgrade_aur(options).await;
|
|
}
|
|
if !args.aur && !args.repo {
|
|
upgrade_repo(options).await;
|
|
upgrade_aur(options).await;
|
|
}
|
|
}
|
|
|
|
#[tracing::instrument(level = "trace")]
|
|
async fn upgrade_repo(options: Options) {
|
|
let noconfirm = options.noconfirm;
|
|
let quiet = options.quiet;
|
|
|
|
tracing::debug!("Upgrading repo packages");
|
|
|
|
let result = PacmanUpgradeBuilder::default()
|
|
.no_confirm(noconfirm)
|
|
.quiet(quiet)
|
|
.upgrade()
|
|
.await;
|
|
|
|
if result.is_err() {
|
|
let continue_upgrading = prompt!(default no,
|
|
"{}", fl!("failed-upgrade-repo-pkgs")
|
|
);
|
|
if !continue_upgrading {
|
|
tracing::info!("Exiting");
|
|
std::process::exit(AppExitCode::PacmanError as i32);
|
|
}
|
|
} else {
|
|
tracing::info!("{}", fl!("success-upgrade-repo-pkgs"));
|
|
}
|
|
}
|
|
|
|
#[tracing::instrument(level = "trace")]
|
|
async fn upgrade_aur(options: Options) {
|
|
tracing::debug!("Upgrading AUR packages");
|
|
|
|
let non_native_pkgs = PacmanQueryBuilder::foreign()
|
|
.color(PacmanColor::Never)
|
|
.query_with_output()
|
|
.await
|
|
.silent_unwrap(AppExitCode::PacmanError);
|
|
|
|
tracing::debug!("aur packages: {non_native_pkgs:?}");
|
|
let mut aur_upgrades = vec![];
|
|
|
|
for pkg in non_native_pkgs {
|
|
let remote_package = rpcinfo(&pkg.name)
|
|
.await
|
|
.silent_unwrap(AppExitCode::RpcError);
|
|
|
|
if let Some(remote_package) = remote_package {
|
|
if remote_package.metadata.version != pkg.version {
|
|
tracing::debug!(
|
|
"local version: {}, remote version: {}",
|
|
pkg.version,
|
|
remote_package.metadata.version
|
|
);
|
|
aur_upgrades.push(pkg.name);
|
|
}
|
|
} else {
|
|
tracing::warn!("{}", fl!("couldnt-find-remote-pkg", pkg = pkg.name));
|
|
}
|
|
}
|
|
|
|
if !aur_upgrades.is_empty() {
|
|
let options = Options {
|
|
upgrade: true,
|
|
..options
|
|
};
|
|
aur_install(aur_upgrades, options).await;
|
|
} else {
|
|
tracing::info!("{}", fl!("no-upgrades-aur-package"));
|
|
}
|
|
|
|
tracing::info!("{}", fl!("scanning-for-pacnew"));
|
|
detect().await;
|
|
}
|