use clap::Parser;
use pkq::cli::Cli;
use pkq::engine;
use pkq::error::PkgError;
use pkq::model;
#[cfg(unix)]
fn reset_sigpipe() {
unsafe {
libc::signal(libc::SIGPIPE, libc::SIG_DFL);
}
}
#[cfg(not(unix))]
fn reset_sigpipe() {}
fn main() {
reset_sigpipe();
let cli = Cli::parse();
pkq::logging::init(cli.verbose);
let cache_cfg = model::CacheConfig {
ttl_secs: cli.cache_ttl,
force_refresh: cli.refresh,
offline_mode: cli.offline,
};
let output_format = cli.output;
pkq::output::set_json_compact(cli.compact);
let result = engine::run(&cli.command, &cache_cfg, output_format);
match result {
Ok(engine::ExitStatus::Hit) => {}
Ok(engine::ExitStatus::NotFound) => {
if !cli.legacy_exit_code {
std::process::exit(1);
}
}
Err(e) => {
if let PkgError::IoError(ref msg) = e {
if msg.contains("Broken pipe") {
std::process::exit(0);
}
}
eprintln!("Error: {}", e);
std::process::exit(if cli.legacy_exit_code { 0 } else { 2 });
}
}
}