From ffe05f58d0f55749e58fd4927eda3422a5ff2fe7 Mon Sep 17 00:00:00 2001 From: aawsome <37850842+aawsome@users.noreply.github.com> Date: Sat, 7 Sep 2024 07:28:59 +0200 Subject: [PATCH] fix: return exitcode (#1220) rustic now returns an error code for failing command. Note: Some command do not fail yet fail in every cases user would expect is. Most notably the `check` ckommand producing `error` messages may still return error code 0. closes #927 --- src/application.rs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/application.rs b/src/application.rs index 63513b6..60a90cd 100644 --- a/src/application.rs +++ b/src/application.rs @@ -1,11 +1,11 @@ //! Rustic Abscissa Application -use std::env; +use std::{env, process}; use abscissa_core::{ - application::{self, AppCell}, + application::{self, fatal_error, AppCell}, config::{self, CfgCell}, terminal::component::Terminal, - Application, Component, FrameworkError, StandardPaths, + Application, Component, FrameworkError, Shutdown, StandardPaths, }; use anyhow::Result; @@ -99,4 +99,25 @@ impl Application for RusticApp { Ok(()) } + + /// Shut down this application gracefully + fn shutdown(&self, shutdown: Shutdown) -> ! { + let exit_code = match shutdown { + Shutdown::Crash => 1, + _ => 0, + }; + self.shutdown_with_exitcode(shutdown, exit_code) + } +} + +impl RusticApp { + /// Shut down this application gracefully, exiting with given exit code. + fn shutdown_with_exitcode(&self, shutdown: Shutdown, exit_code: i32) -> ! { + let result = self.state().components().shutdown(self, shutdown); + if let Err(e) = result { + fatal_error(self, &e) + } + + process::exit(exit_code); + } }