diff --git a/crates/bin/src/bin_util.rs b/crates/bin/src/bin_util.rs index 7a85ad0b..1fe6f6ae 100644 --- a/crates/bin/src/bin_util.rs +++ b/crates/bin/src/bin_util.rs @@ -11,7 +11,7 @@ use miette::Result; use tokio::runtime::Runtime; pub enum MainExit { - Success(Duration), + Success(Option), Error(BinstallError), Report(miette::Report), } @@ -20,7 +20,9 @@ impl Termination for MainExit { fn report(self) -> ExitCode { match self { Self::Success(spent) => { - info!("Done in {spent:?}"); + if let Some(spent) = spent { + info!("Done in {spent:?}"); + } ExitCode::SUCCESS } Self::Error(err) => err.report(), @@ -35,11 +37,12 @@ impl Termination for MainExit { impl MainExit { pub fn new(result: Result, BinstallError>, done: Duration) -> Self { result.map_or_else(MainExit::Error, |res| { - res.map(|()| MainExit::Success(done)).unwrap_or_else(|err| { - err.downcast::() - .map(MainExit::Error) - .unwrap_or_else(MainExit::Report) - }) + res.map(|()| MainExit::Success(Some(done))) + .unwrap_or_else(|err| { + err.downcast::() + .map(MainExit::Error) + .unwrap_or_else(MainExit::Report) + }) }) } } diff --git a/crates/bin/src/main.rs b/crates/bin/src/main.rs index d7312502..b80cd006 100644 --- a/crates/bin/src/main.rs +++ b/crates/bin/src/main.rs @@ -22,14 +22,19 @@ fn main() -> MainExit { Err(err) => return MainExit::Error(err), }; - ui::logging(&args); + if args.version { + println!("{}", env!("CARGO_PKG_VERSION")); + MainExit::Success(None) + } else { + ui::logging(&args); - let start = Instant::now(); + let start = Instant::now(); - let result = run_tokio_main(entry::install_crates(args, jobserver_client)); + let result = run_tokio_main(entry::install_crates(args, jobserver_client)); - let done = start.elapsed(); - debug!("run time: {done:?}"); + let done = start.elapsed(); + debug!("run time: {done:?}"); - MainExit::new(result, done) + MainExit::new(result, done) + } }