Change id reporting API to return ExitCode

Because this API only errors when write!() errors occur, we can return
the exit code as an error here.

This way the user of the API can immediately exit if there was an IO
error, but the API automatically takes care of the right return value,
returning (exiting) with zero (0) if there was an "Broken pipe" error
and with one (1) otherwise, which is the expected behaviour here.

All calls to that API were changed accordingly.

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
Matthias Beyer 2019-02-03 19:53:50 +01:00
parent 19912f5e88
commit f1a639ea8c
35 changed files with 75 additions and 153 deletions

View file

@ -138,9 +138,7 @@ fn add(rt: &Runtime) {
.set_coordinates(c.clone())
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
});
}
@ -175,9 +173,7 @@ fn remove(rt: &Runtime) {
let _ = writeln!(rt.stdout(), "{}", removed_value).to_exit_code().unwrap_or_exit();
}
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
});
}
@ -204,9 +200,7 @@ fn get(rt: &Runtime) {
let _ = writeln!(stdout, "{}", value).to_exit_code().unwrap_or_exit();
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
})
}

View file

@ -125,8 +125,6 @@ fn show(rt: &Runtime, e: &Entry, re: &Regex, opts: &Options, count: &mut usize)
*count += 1;
}
let _ = rt
.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
}

View file

@ -127,11 +127,12 @@ fn main() {
trace!("Got output: {:?}", stdout);
iterator.for_each(|id| {
rt.report_touched(&id).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit(); // .map_err_trace_exit_unwrap(1);
if !rt.output_is_pipe() {
let id = id.to_str().map_err_trace_exit_unwrap(1);
trace!("Writing to {:?}", stdout);
let _ = writeln!(stdout, "{}", id)
writeln!(stdout, "{}", id)
.to_exit_code()
.unwrap_or_exit();
}

View file

@ -164,7 +164,7 @@ fn link_from_to<'a, I>(rt: &'a Runtime, from: &'a str, to: I)
.map_err_trace_exit_unwrap(1)
.into_iter();
let _ = rt.report_all_touched(iter).map_err_trace_exit_unwrap(1);
let _ = rt.report_all_touched(iter).unwrap_or_exit();
} else {
debug!("Linking internally: {:?} -> {:?}", from, entry);
@ -187,18 +187,14 @@ fn link_from_to<'a, I>(rt: &'a Runtime, from: &'a str, to: I)
.add_internal_link(&mut to_entry)
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(to_entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(to_entry.get_location()).unwrap_or_exit();
}
info!("Ok: {} -> {}", from, entry);
}
let _ = rt
.report_touched(from_entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(from_entry.get_location()).unwrap_or_exit();
}
fn remove_linking(rt: &Runtime) {
@ -226,9 +222,7 @@ fn remove_linking(rt: &Runtime) {
.remove_internal_link(&mut from)
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(to_entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(to_entry.get_location()).unwrap_or_exit();
},
Ok(None) => {
// looks like this is not an entry, but a filesystem URI and therefor an
@ -250,9 +244,7 @@ fn remove_linking(rt: &Runtime) {
}
});
let _ = rt
.report_touched(from.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(from.get_location()).unwrap_or_exit();
}
fn unlink(rt: &Runtime) {
@ -267,9 +259,7 @@ fn unlink(rt: &Runtime) {
.unlink(rt.store())
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
});
}
@ -323,18 +313,14 @@ fn list_linkings(rt: &Runtime) {
})
}
let _ = rt
.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
},
Ok(None) => warn!("Not found: {}", id),
Err(e) => trace_error(&e),
}
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
});
if !list_plain {

View file

@ -52,6 +52,7 @@ use std::path::PathBuf;
use libimagrt::setup::generate_runtime_setup;
use libimagerror::trace::MapErrTrace;
use libimagerror::iter::TraceIterator;
use libimagerror::exit::ExitUnwrap;
use libimagstore::storeid::StoreId;
use libimagstore::store::Store;
use libimagstore::store::FileLockEntry;
@ -131,8 +132,7 @@ fn main() {
})
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&destname)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&destname).unwrap_or_exit();
// re-add links to moved entry
relink(rt.store(), destname, &mut linked_entries);

View file

@ -102,7 +102,7 @@ fn deref(rt: &Runtime) {
.map(|s| info!("{}", s))
.ok(); // safe here because we exited already in the error case
let _ = rt.report_touched(&id).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
},
None => {
error!("No entry for id '{}' found", id);

View file

@ -63,7 +63,7 @@ pub fn create(rt: &Runtime) {
}
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).unwrap_or_exit();
}
fn create_from_cli_spec(rt: &Runtime, matches: &ArgMatches, path: &StoreId) -> Result<()> {

View file

@ -37,7 +37,7 @@ pub fn get(rt: &Runtime) {
let _ = match rt.store().get(path.clone()).map_err_trace_exit_unwrap(1) {
Some(entry) => {
print_entry(rt, scmd, entry);
let _ = rt.report_touched(&path).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).unwrap_or_exit();
},
None => info!("No entry found"),
};

View file

@ -48,7 +48,7 @@ pub fn retrieve(rt: &Runtime) {
.map_dbg(|e| format!("{:?}", e))
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).unwrap_or_exit();
});
}

View file

@ -49,7 +49,7 @@ pub fn update(rt: &Runtime) {
debug!("New header set");
}
let _ = rt.report_touched(locked_e.get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(locked_e.get_location()).unwrap_or_exit();
});
}

View file

@ -47,7 +47,7 @@ pub fn verify(rt: &Runtime) {
};
info!("{: >6} | {: >14} | {:?}", verify, content_len, p.deref());
let _ = rt.report_touched(fle.get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(fle.get_location()).unwrap_or_exit();
status
});

View file

@ -157,9 +157,7 @@ fn alter(rt: &Runtime, path: StoreId, add: Option<Vec<Tag>>, rem: Option<Vec<Tag
},
}
let _ = rt
.report_touched(&path)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).unwrap_or_exit();
}
fn list(path: StoreId, rt: &Runtime) {
@ -207,9 +205,7 @@ fn list(path: StoreId, rt: &Runtime) {
.unwrap_or_exit();
}
let _ = rt
.report_touched(&path)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&path).unwrap_or_exit();
}
/// Get the tags which should be added from the commandline

View file

@ -98,8 +98,7 @@ fn main() {
let files = entries
.map(|entry| {
let tmpfile = create_tempfile_for(&entry, view_header, hide_content);
rt.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
rt.report_touched(entry.get_location()).unwrap_or_exit();
tmpfile
})
.collect::<Vec<_>>();
@ -209,8 +208,7 @@ fn main() {
.view_entry(&entry, &mut outlock)
.map_err_trace_exit_unwrap(1);
rt.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
rt.report_touched(entry.get_location()).unwrap_or_exit();
});
} else {
let mut viewer = StdoutViewer::new(view_header, !hide_content);
@ -244,8 +242,7 @@ fn main() {
.view_entry(&entry, &mut outlock)
.map_err_trace_exit_unwrap(1);
rt.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
rt.report_touched(entry.get_location()).unwrap_or_exit();
});
}
}

View file

@ -101,18 +101,14 @@ fn add(rt: &Runtime) {
.ok_or_else(|| format_err!("No bookmark collection '{}' found", coll))
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(collection.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(collection.get_location()).unwrap_or_exit();
for url in scmd.values_of("urls").unwrap() { // unwrap saved by clap
let new_ids = collection
.add_link(rt.store(), BookmarkLink::from(url))
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_all_touched(new_ids.into_iter())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_all_touched(new_ids.into_iter()).unwrap_or_exit();
}
info!("Ready");
@ -124,7 +120,7 @@ fn collection(rt: &Runtime) {
if scmd.is_present("add") { // adding a new collection
let name = scmd.value_of("add").unwrap();
if let Ok(id) = BookmarkCollectionStore::new(rt.store(), &name) {
let _ = rt.report_touched(id.get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(id.get_location()).unwrap_or_exit();
info!("Created: {}", name);
} else {
warn!("Creating collection {} failed", name);
@ -151,9 +147,7 @@ fn list(rt: &Runtime) {
.ok_or_else(|| format_err!("No bookmark collection '{}' found", coll))
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(collection.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(collection.get_location()).unwrap_or_exit();
collection
.links(rt.store())
@ -177,18 +171,14 @@ fn remove(rt: &Runtime) {
.ok_or_else(|| format_err!("No bookmark collection '{}' found", coll))
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(collection.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(collection.get_location()).unwrap_or_exit();
for url in scmd.values_of("urls").unwrap() { // enforced by clap
let removed_links = collection
.remove_link(rt.store(), BookmarkLink::from(url))
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_all_touched(removed_links.into_iter())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_all_touched(removed_links.into_iter()).unwrap_or_exit();
}
info!("Ready");

View file

@ -204,8 +204,7 @@ pub fn create(rt: &Runtime) {
.create_from_path(&location)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
info!("Created entry in store");
} else {

View file

@ -125,8 +125,7 @@ fn list(rt: &Runtime) {
.map(|fle| fle.ok_or_else(|| Error::from(err_msg("StoreId not found".to_owned()))))
.trace_unwrap_exit(1)
.map(|fle| {
let _ = rt.report_touched(fle.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(fle.get_location()).unwrap_or_exit();
fle
})
.map(|e| e.deser())
@ -171,9 +170,7 @@ fn import(rt: &Runtime) {
.retrieve_from_path(&path)
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
} else if path.is_dir() {
for entry in WalkDir::new(path).min_depth(1).into_iter() {
let entry = entry
@ -187,9 +184,7 @@ fn import(rt: &Runtime) {
.retrieve_from_path(&pb)
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(fle.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(fle.get_location()).unwrap_or_exit();
info!("Imported: {}", entry.path().to_str().unwrap_or("<non UTF-8 path>"));
} else {
warn!("Ignoring non-file: {}", entry.path().to_str().unwrap_or("<non UTF-8 path>"));
@ -228,9 +223,7 @@ fn show(rt: &Runtime) {
.unwrap() // exited above
.starts_with(&hash)
{
let _ = rt
.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
Some(deser)
} else {
None
@ -285,9 +278,7 @@ fn find(rt: &Runtime) {
|| card.fullname().iter().any(|a| str_contains_any(a, &grepstring));
if take {
let _ = rt
.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
// optimization so we don't have to parse again in the next step
Some((entry, card))

View file

@ -45,7 +45,7 @@ pub fn create(rt: &Runtime) {
let mut entry = create_entry(rt.store(), &diaryname, rt);
let _ = rt.report_touched(entry.get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
let res = if rt.cli().subcommand_matches("create").unwrap().is_present("no-edit") {
debug!("Not editing new diary entry");

View file

@ -66,9 +66,7 @@ pub fn delete(rt: &Runtime) {
return;
}
let _ = rt
.report_touched(&to_del_location)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&to_del_location).unwrap_or_exit();
let _ = rt
.store()

View file

@ -55,9 +55,7 @@ pub fn list(rt: &Runtime) {
.map(IntoStoreId::into_storeid)
.trace_unwrap_exit(1)
.for_each(|id| {
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
writeln!(rt.stdout(), "{}", id).to_exit_code().unwrap_or_exit()
});

View file

@ -42,9 +42,7 @@ pub fn view(rt: &Runtime) {
}));
let entries = entries.map(|e| {
let _ = rt
.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
e
});

View file

@ -155,7 +155,7 @@ fn create(rt: &Runtime) {
debug!("Builder = {:?}", hb);
let fle = hb.build(rt.store()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(fle.get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(fle.get_location()).unwrap_or_exit();
}
fn delete(rt: &Runtime) {
@ -441,9 +441,7 @@ fn list(rt: &Runtime) {
let mut list = lister_fn(&e);
{
let _ = rt
.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
}
v.append(&mut list);
@ -520,9 +518,7 @@ fn show(rt: &Runtime) {
let mut instances = instance_lister_fn(&e);
{
let _ = rt
.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
}
v.append(&mut instances);
@ -582,9 +578,7 @@ fn done(rt: &Runtime) {
}
{
let _ = rt
.report_touched(r.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(r.get_location()).unwrap_or_exit();
}
}

View file

@ -171,7 +171,7 @@ fn show(rt: &Runtime) {
let _ = rt
.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
.unwrap_or_exit();
Ok(())
})
.collect::<Result<Vec<()>, ExitCode>>()

View file

@ -95,7 +95,7 @@ fn import_mail(rt: &Runtime) {
.map_info_str("Ok")
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(mail.fle().get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(mail.fle().get_location()).unwrap_or_exit();
}
fn list(rt: &Runtime) {
@ -147,7 +147,7 @@ fn list(rt: &Runtime) {
to = to
).to_exit_code().unwrap_or_exit();
let _ = rt.report_touched(m.fle().get_location()).map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(m.fle().get_location()).unwrap_or_exit();
}
let _ = rt.store()

View file

@ -112,9 +112,7 @@ fn create(rt: &Runtime) {
.map_err_trace_exit_unwrap(1);
}
let _ = rt
.report_touched(note.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(note.get_location()).unwrap_or_exit();
}
fn delete(rt: &Runtime) {
@ -136,9 +134,7 @@ fn edit(rt: &Runtime) {
.map_warn_err_str("Editing failed")
.map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(note.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(note.get_location()).unwrap_or_exit();
})
.unwrap_or_else(|| {
error!("Cannot find note with name '{}'", name);
@ -170,9 +166,7 @@ fn list(rt: &Runtime) {
.to_exit_code()
.unwrap_or_exit();
let _ = rt
.report_touched(note.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(note.get_location()).unwrap_or_exit();
});
}

View file

@ -87,8 +87,7 @@ pub fn cont(rt: &Runtime) -> i32 {
.map(|_| 0)
.map_err_trace();
let _ = rt.report_touched(tracking.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(tracking.get_location()).unwrap_or_exit();
val
})

View file

@ -103,8 +103,7 @@ pub fn day(rt: &Runtime) -> i32 {
let end = e.get_end_datetime()?;
debug!(" -> end = {:?}", end);
let _ = rt.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
Ok((tag, start, end))
})

View file

@ -162,8 +162,7 @@ pub fn list_impl(rt: &Runtime,
.collect();
tab.add_row(Row::new(cells));
let _ = rt.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
Ok(tab)
})

View file

@ -118,8 +118,7 @@ pub fn month(rt: &Runtime) -> i32 {
let end = e.get_end_datetime()?;
debug!(" -> end = {:?}", end);
let _ = rt.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit(1);
Ok((tag, start, end))
})

View file

@ -59,8 +59,7 @@ pub fn start(rt: &Runtime) -> i32 {
1
},
Ok(entry) => {
let _ = rt.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
acc
}

View file

@ -98,8 +98,7 @@ pub fn stop(rt: &Runtime) -> i32 {
}
Ok(_) => {
format!("Setting end time worked: {:?}", elem);
let _ = rt.report_touched(elem.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(elem.get_location()).unwrap_or_exit();
acc
}
}

View file

@ -87,8 +87,7 @@ pub fn track(rt: &Runtime) -> i32 {
1
},
Ok(entry) => {
let _ = rt.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
acc
}
})

View file

@ -116,8 +116,7 @@ pub fn week(rt: &Runtime) -> i32 {
let end = e.get_end_datetime()?;
debug!(" -> end = {:?}", end);
let _ = rt.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
Ok((tag, start, end))
})

View file

@ -116,8 +116,7 @@ pub fn year(rt: &Runtime) -> i32 {
let end = e.get_end_datetime()?;
debug!(" -> end = {:?}", end);
let _ = rt.report_touched(e.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(e.get_location()).unwrap_or_exit();
Ok((tag, start, end))
})

View file

@ -181,9 +181,7 @@ fn create(rt: &Runtime, wiki_name: &str) {
writeln!(lock, "{}", id).to_exit_code().unwrap_or_exit()
}
let _ = rt
.report_touched(&id)
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(&id).unwrap_or_exit();
}
fn create_wiki(rt: &Runtime) {
@ -191,9 +189,7 @@ fn create_wiki(rt: &Runtime) {
let wiki_name = String::from(scmd.value_of("create-wiki-name").unwrap()); // safe by clap
let (_, index) = rt.store().create_wiki(&wiki_name).map_err_trace_exit_unwrap(1);
let _ = rt
.report_touched(index.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(index.get_location()).unwrap_or_exit();
}
fn show(rt: &Runtime, wiki_name: &str) {
@ -251,9 +247,7 @@ fn show(rt: &Runtime, wiki_name: &str) {
.to_exit_code()
.unwrap_or_exit();
let _ = rt
.report_touched(entry.get_location())
.map_err_trace_exit_unwrap(1);
let _ = rt.report_touched(entry.get_location()).unwrap_or_exit();
}
}

View file

@ -25,6 +25,7 @@ use std::io::Stdin;
use std::sync::Arc;
use std::io::StdoutLock;
use std::borrow::Borrow;
use std::result::Result as RResult;
pub use clap::App;
use clap::AppSettings;
@ -41,8 +42,10 @@ use configuration::{fetch_config, override_config, InternalConfiguration};
use logger::ImagLogger;
use io::OutputProxy;
use libimagerror::exit::ExitCode;
use libimagerror::errors::ErrorMsg as EM;
use libimagerror::trace::*;
use libimagerror::io::ToExitCode;
use libimagstore::store::Store;
use libimagstore::storeid::StoreId;
use libimagstore::file_abstraction::InMemoryFileAbstraction;
@ -573,14 +576,14 @@ impl<'a> Runtime<'a> {
.map_err(Error::from)
}
pub fn report_touched(&self, id: &StoreId) -> Result<()> {
pub fn report_touched(&self, id: &StoreId) -> RResult<(), ExitCode> {
let out = ::std::io::stdout();
let mut lock = out.lock();
self.report_touched_id(id, &mut lock)
}
pub fn report_all_touched<ID, I>(&self, ids: I) -> Result<()>
pub fn report_all_touched<ID, I>(&self, ids: I) -> RResult<(), ExitCode>
where ID: Borrow<StoreId> + Sized,
I: Iterator<Item = ID>
{
@ -595,15 +598,15 @@ impl<'a> Runtime<'a> {
}
#[inline]
fn report_touched_id(&self, id: &StoreId, output: &mut StdoutLock) -> Result<()> {
fn report_touched_id(&self, id: &StoreId, output: &mut StdoutLock) -> RResult<(), ExitCode> {
use std::io::Write;
if self.output_is_pipe() && !self.ignore_ids {
trace!("Reporting: {} to {:?}", id, output);
writeln!(output, "{}", id)?;
writeln!(output, "{}", id).to_exit_code()
} else {
Ok(())
}
Ok(())
}
}