Optimize: Do not attempt to print if output is a pipe
This is a small optimization so that we do not print the information if the output is a pipe anyways. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
parent
f1a639ea8c
commit
c8e74193b3
1 changed files with 47 additions and 43 deletions
|
@ -288,52 +288,56 @@ fn find(rt: &Runtime) {
|
||||||
})
|
})
|
||||||
.enumerate();
|
.enumerate();
|
||||||
|
|
||||||
if scmd.is_present("json") {
|
if !rt.output_is_pipe() {
|
||||||
let v : Vec<DeserVcard> = iterator.map(|(_, tlp)| tlp.1).collect();
|
if scmd.is_present("json") {
|
||||||
|
let v : Vec<DeserVcard> = iterator.map(|(_, tlp)| tlp.1).collect();
|
||||||
|
|
||||||
match ::serde_json::to_string(&v) {
|
match ::serde_json::to_string(&v) {
|
||||||
Ok(s) => writeln!(rt.stdout(), "{}", s).to_exit_code().unwrap_or_exit(),
|
Ok(s) => writeln!(rt.stdout(), "{}", s).to_exit_code().unwrap_or_exit(),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Error generating JSON: {:?}", e);
|
error!("Error generating JSON: {:?}", e);
|
||||||
::std::process::exit(1)
|
::std::process::exit(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else if scmd.is_present("find-id") {
|
||||||
|
iterator
|
||||||
|
.for_each(|(_i, (entry, _))| {
|
||||||
|
writeln!(rt.stdout(), "{}", entry.get_location())
|
||||||
|
.to_exit_code()
|
||||||
|
.unwrap_or_exit();
|
||||||
|
})
|
||||||
|
} else if scmd.is_present("find-full-id") {
|
||||||
|
let storepath = rt.store().path().display();
|
||||||
|
iterator
|
||||||
|
.for_each(|(_i, (entry, _))| {
|
||||||
|
writeln!(rt.stdout(), "{}/{}", storepath, entry.get_location())
|
||||||
|
.to_exit_code()
|
||||||
|
.unwrap_or_exit();
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
iterator
|
||||||
|
.for_each(|(i, (_, card))| {
|
||||||
|
let fmt = if scmd.is_present("find-show") {
|
||||||
|
&show_format
|
||||||
|
} else if scmd.is_present("find-list") {
|
||||||
|
&list_format
|
||||||
|
} else { // default: find-list
|
||||||
|
&list_format
|
||||||
|
};
|
||||||
|
|
||||||
|
let data = build_data_object_for_handlebars(i, &card);
|
||||||
|
let s = fmt
|
||||||
|
.render("format", &data)
|
||||||
|
.map_err(Error::from)
|
||||||
|
.map_err_trace_exit_unwrap(1);
|
||||||
|
|
||||||
|
let _ = writeln!(rt.stdout(), "{}", s)
|
||||||
|
.to_exit_code()
|
||||||
|
.unwrap_or_exit();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if scmd.is_present("find-id") {
|
} else { // if not printing, we still have to consume the iterator to report the touched IDs
|
||||||
iterator
|
let _ = iterator.collect::<Vec<_>>();
|
||||||
.for_each(|(_i, (entry, _))| {
|
|
||||||
writeln!(rt.stdout(), "{}", entry.get_location())
|
|
||||||
.to_exit_code()
|
|
||||||
.unwrap_or_exit();
|
|
||||||
})
|
|
||||||
} else if scmd.is_present("find-full-id") {
|
|
||||||
let storepath = rt.store().path().display();
|
|
||||||
iterator
|
|
||||||
.for_each(|(_i, (entry, _))| {
|
|
||||||
writeln!(rt.stdout(), "{}/{}", storepath, entry.get_location())
|
|
||||||
.to_exit_code()
|
|
||||||
.unwrap_or_exit();
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
iterator
|
|
||||||
.for_each(|(i, (_, card))| {
|
|
||||||
let fmt = if scmd.is_present("find-show") {
|
|
||||||
&show_format
|
|
||||||
} else if scmd.is_present("find-list") {
|
|
||||||
&list_format
|
|
||||||
} else { // default: find-list
|
|
||||||
&list_format
|
|
||||||
};
|
|
||||||
|
|
||||||
let data = build_data_object_for_handlebars(i, &card);
|
|
||||||
let s = fmt
|
|
||||||
.render("format", &data)
|
|
||||||
.map_err(Error::from)
|
|
||||||
.map_err_trace_exit_unwrap(1);
|
|
||||||
|
|
||||||
let _ = writeln!(rt.stdout(), "{}", s)
|
|
||||||
.to_exit_code()
|
|
||||||
.unwrap_or_exit();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue