Remove calls to exit() and replace them with error propagation up to main()

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
Matthias Beyer 2019-10-19 08:54:57 +02:00
parent f881f44d06
commit 0e74225094

View file

@ -51,12 +51,12 @@ extern crate libimagstore;
use std::io::Write;
use filters::filter::Filter;
use failure::Fallible as Result;
use failure::Error;
use failure::err_msg;
use libimagstore::storeid::StoreId;
use libimagrt::setup::generate_runtime_setup;
use libimagerror::trace::MapErrTrace;
use libimagerror::exit::ExitUnwrap;
use libimagerror::io::ToExitCode;
mod ui;
@ -83,7 +83,7 @@ impl<'a, A> Filter<StoreId> for IsInCollectionsFilter<'a, A>
}
fn main() {
fn main() -> Result<()> {
let version = make_imag_version!();
let rt = generate_runtime_setup("imag-id-in-collection",
&version,
@ -99,22 +99,19 @@ fn main() {
let mut stdout = rt.stdout();
trace!("Got output: {:?}", stdout);
rt.ids::<crate::ui::PathProvider>()
.map_err_trace_exit_unwrap()
.unwrap_or_else(|| {
error!("No ids supplied");
::std::process::exit(1);
})
rt.ids::<crate::ui::PathProvider>()?
.ok_or_else(|| err_msg("No ids supplied"))?
.iter()
.filter(|id| collection_filter.filter(id))
.for_each(|id| {
rt.report_touched(&id).unwrap_or_exit();
.map(|id| {
if !rt.output_is_pipe() {
let id = id.to_str().map_err_trace_exit_unwrap();
let id = id.to_str()?;
trace!("Writing to {:?}", stdout);
writeln!(stdout, "{}", id).to_exit_code().unwrap_or_exit();
}
})
writeln!(stdout, "{}", id)?;
}
rt.report_touched(&id).map_err(Error::from)
})
.collect()
}