From f4f6e369847366d69dd054618adf65d8897c8826 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Tue, 18 Oct 2022 15:10:44 +1100 Subject: [PATCH] Fix `-V` behavior (#488) Fixed #485 * Make `Duration` in MainExit::Success` optional * Fix arg parsing: Print version on `-V` Signed-off-by: Jiahao XU --- crates/bin/src/bin_util.rs | 17 ++++++++++------- crates/bin/src/main.rs | 17 +++++++++++------ 2 files changed, 21 insertions(+), 13 deletions(-) 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) + } }