diff --git a/summarize/src/main.rs b/summarize/src/main.rs index 9c3ce65..8cdf521 100644 --- a/summarize/src/main.rs +++ b/summarize/src/main.rs @@ -5,7 +5,7 @@ use analyzeme::AnalysisResults; use analyzeme::ProfilingData; use std::error::Error; use std::fs::File; -use std::io::{BufReader, BufWriter}; +use std::io::{BufReader, BufWriter, Write}; use std::{path::PathBuf, time::Duration}; use clap::Parser; @@ -94,6 +94,17 @@ fn aggregate(opt: AggregateOpt) -> Result<(), Box> { Ok(()) } +fn write_stdout(fmt_args: std::fmt::Arguments) -> Result<(), Box> { + std::io::stdout().write_fmt(fmt_args).map_err(|e| { + if matches!(e.kind(), std::io::ErrorKind::BrokenPipe) { + // Broken pipes are somewhat expected, exit without writing anything else. + std::process::exit(0); + } + + format!("failed writing to stdout: {e}").into() + }) +} + fn diff(opt: DiffOpt) -> Result<(), Box> { let base = process_results(&opt.base)?; let change = process_results(&opt.change)?; @@ -142,7 +153,7 @@ fn diff(opt: DiffOpt) -> Result<(), Box> { table.printstd(); - println!("Total cpu time: {:?}", results.total_time); + write_stdout(format_args!("Total cpu time: {:?}\n", results.total_time))?; let mut table = Table::new(); @@ -286,13 +297,13 @@ fn summarize(opt: SummarizeOpt) -> Result<(), Box> { table.printstd(); - println!("Total cpu time: {:?}", results.total_time); + write_stdout(format_args!("Total cpu time: {:?}\n", results.total_time))?; if percent_above != 0.0 { - println!( - "Filtered results account for {:.3}% of total time.", + write_stdout(format_args!( + "Filtered results account for {:.3}% of total time.\n", percent_total_time - ); + ))?; } let mut table = Table::new();