mod aur;
mod cli;
mod dep;
mod download;
mod info;
mod install;
mod localdb;
mod menu;
mod pacman;
mod resolver;
mod search;
mod upgrade;
mod version;
use anyhow::Result;
pub async fn run(args: Vec<String>) -> Result<i32> {
let parsed = cli::parse(args)?;
match &parsed.command {
cli::Command::Help => {
cli::print_help();
return Ok(0);
}
cli::Command::Version => {
println!("knott {}", env!("CARGO_PKG_VERSION"));
return Ok(0);
}
_ => {}
}
let tools = pacman::Toolchain::from_env();
let aur = aur::AurClient::from_env()?;
match parsed.command {
cli::Command::DefaultUpgrade => {
install::sync(&parsed.options, &tools, &aur, &[], true, true).await
}
cli::Command::Search { terms } => {
search::print_search(&parsed.options, &tools, &aur, &terms).await
}
cli::Command::Info { targets } => {
info::print_info(&parsed.options, &tools, &aur, &targets).await
}
cli::Command::Install {
targets,
refresh,
sysupgrade,
} => install::sync(&parsed.options, &tools, &aur, &targets, refresh, sysupgrade).await,
cli::Command::Get { targets, print } => {
download::get_pkgbuilds(&parsed.options, &tools, &aur, &targets, print).await
}
cli::Command::QueryForeign => upgrade::print_foreign(&parsed.options, &tools).await,
cli::Command::QueryAurUpdates => {
upgrade::print_aur_updates(&parsed.options, &tools, &aur).await
}
cli::Command::Forward(args) => tools.forward(&args).await,
cli::Command::Interactive { terms } => {
let selected =
search::interactive_select(&parsed.options, &tools, &aur, &terms).await?;
if selected.is_empty() {
return Ok(0);
}
install::sync(&parsed.options, &tools, &aur, &selected, false, false).await
}
cli::Command::Help | cli::Command::Version => unreachable!(),
}
}