Don't panic on broken pipe (e.g. npmctl list-hosts | head)
All checks were successful
release / build-release (push) Successful in 11m9s

Reset SIGPIPE to SIG_DFL at startup so writing to a closed stdout
terminates the process quietly like normal Unix tools, instead of
panicking with "failed printing to stdout: Broken pipe".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ
This commit is contained in:
brasse
2026-07-04 16:33:55 +02:00
parent 1d71265b84
commit 45307cd8f5
3 changed files with 12 additions and 0 deletions

1
Cargo.lock generated
View File

@@ -629,6 +629,7 @@ dependencies = [
"chrono",
"clap",
"dirs",
"libc",
"reqwest",
"rpassword",
"serde",

View File

@@ -21,6 +21,9 @@ dirs = "5"
anyhow = "1"
chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
[target.'cfg(unix)'.dependencies]
libc = "0.2"
[profile.release]
strip = true
opt-level = "z"

View File

@@ -14,6 +14,14 @@ use client::NpmClient;
use config::{resolve_base_url, Paths};
fn main() {
// Bete oss som vanliga Unix-verktyg när stdout stängs tidigt (t.ex. `| head`):
// återställ SIGPIPE till default så processen avslutas tyst i stället för att
// panika på "Broken pipe" i println!.
#[cfg(unix)]
unsafe {
libc::signal(libc::SIGPIPE, libc::SIG_DFL);
}
// Egen parse-hantering: vid felaktig input skriver vi ut hjälpen
// (utöver felmeddelandet), enligt önskemål. --help/--version skrivs ut normalt.
let cli = match Cli::try_parse() {