summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-03-10 16:20:36 +0100
committerGitHub <noreply@github.com>2018-03-10 16:20:36 +0100
commitd3b38b5a90792d87037ec48382312c9e6c4bf6dd (patch)
tree9d4ba1dd75c407d28afc4f3d0853f6144df84120
parent80cb70d77c78ad9b096ce5ae5636866e3cbfcd28 (diff)
parentce0bd9298addfbb9f167ddd06bd2c781eb3de8c0 (diff)
downloadimag-d3b38b5a90792d87037ec48382312c9e6c4bf6dd.zip
imag-d3b38b5a90792d87037ec48382312c9e6c4bf6dd.tar.gz
Merge pull request #1330 from matthiasbeyer/libimagrt/pipe-magic
Implement pipe magic in libimagrt
-rw-r--r--lib/core/libimagrt/src/runtime.rs28
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/core/libimagrt/src/runtime.rs b/lib/core/libimagrt/src/runtime.rs
index aec2619..8f18f75 100644
--- a/lib/core/libimagrt/src/runtime.rs
+++ b/lib/core/libimagrt/src/runtime.rs
@@ -49,6 +49,7 @@ pub struct Runtime<'a> {
configuration: Option<Value>,
cli_matches: ArgMatches<'a>,
store: Store,
+ use_pipe_magic: bool,
stdin_is_tty: bool,
stdout_is_tty: bool,
}
@@ -148,12 +149,15 @@ impl<'a> Runtime<'a> {
Store::new(storepath, &config)
};
+ let pipe_magic = matches.is_present(Runtime::pipe_magic_name());
+
store_result.map(|store| {
Runtime {
cli_matches: matches,
configuration: config,
rtp: rtp,
store: store,
+ use_pipe_magic: pipe_magic,
stdout_is_tty: ::atty::is(::atty::Stream::Stdout),
stdin_is_tty: ::atty::is(::atty::Stream::Stdin),
}
@@ -249,6 +253,13 @@ impl<'a> Runtime<'a> {
.takes_value(true)
.value_name("LOGDESTS"))
+ .arg(Arg::with_name(Runtime::pipe_magic_name())
+ .long(Runtime::pipe_magic_name())
+ .short("P")
+ .help("Use pipe-detection. With this flag, imag expects a JSON store on STDIN if stdin is not a TTY and prints the store to STDOUT if it is not a TTY.")
+ .required(false)
+ .takes_value(false))
+
}
/// Get the argument names of the Runtime which are available
@@ -338,6 +349,11 @@ impl<'a> Runtime<'a> {
"logging-destinations"
}
+ /// Get the argument name for pipe magic
+ pub fn pipe_magic_name() -> &'static str {
+ "pipe-magic"
+ }
+
/// Initialize the internal logger
fn init_logger(matches: &ArgMatches, config: Option<&Value>) {
use log::set_max_level;
@@ -446,10 +462,10 @@ impl<'a> Runtime<'a> {
}
pub fn stdout(&self) -> OutputProxy {
- if self.stdout_is_tty {
- OutputProxy::Out(::std::io::stdout())
- } else {
+ if self.use_pipe_magic && !self.stdout_is_tty {
OutputProxy::Err(::std::io::stderr())
+ } else {
+ OutputProxy::Out(::std::io::stdout())
}
}
@@ -458,10 +474,10 @@ impl<'a> Runtime<'a> {
}
pub fn stdin(&self) -> Option<Stdin> {
- if self.stdin_is_tty {
- Some(::std::io::stdin())
- } else {
+ if self.use_pipe_magic && !self.stdin_is_tty {
None
+ } else {
+ Some(::std::io::stdin())
}
}
}