X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.h;h=26a6acabe569356e630e109289ed8cb8e80e0546;hb=2d9a6cf1b0123e5962d5558b57f74c1faf33bf0b;hp=992df5c692a4c7bf8dfd6e6a208d2c64f15afdc0;hpb=658c46ea8ef6d7022cb8c8e06565ebce12842d0b;p=builder.git diff --git a/source/externaltask.h b/source/externaltask.h index 992df5c..26a6aca 100644 --- a/source/externaltask.h +++ b/source/externaltask.h @@ -16,10 +16,11 @@ be captured. class ExternalTask: public Task { public: - enum Destination + enum StreamAction { PASSTHROUGH, //< Do not touch the stream CAPTURE, //< Capture the stream + REDIRECT, //< Redirect the stream to/from a file IGNORE //< Redirect the stream to oblivion }; @@ -30,8 +31,11 @@ private: Msp::FS::Path work_dir; Msp::Process *process; int exit_code; - Destination stdout_dest; - Destination stderr_dest; + StreamAction stdin_action; + Msp::FS::Path stdin_file; + StreamAction stdout_action; + Msp::FS::Path stdout_file; + StreamAction stderr_action; Msp::IO::Pipe *capture_pipe; std::string output; @@ -51,19 +55,25 @@ private: Status do_wait(bool); public: + /// Redirect stdin from a file. Has no effect after the task is started. + void set_stdin(const Msp::FS::Path &); + /// Sets destination for stdout. Has no effect after the task is started. - void set_stdout(Destination); + void set_stdout(StreamAction); + + /// Redirect stdout to a file. Has no effect after the task is started. + void set_stdout(const Msp::FS::Path &); /// Sets destination for stderr. Has no effect after the task is started. - void set_stderr(Destination); + void set_stderr(StreamAction); /** Returns captured output, if any. This may be called while the task is still running, but it will always return all output. */ const std::string &get_output() const { return output; } - /** Executes a command and captures its output. Stderr is ignored, but if - the command exits with a nonzero status, an exception is thrown. */ - static std::string run_and_capture_output(const Arguments &, const Msp::FS::Path & = Msp::FS::Path()); + /** Executes a command and captures its output. If the command exits with + a nonzero status, an exception is thrown. */ + static std::string run_and_capture_output(const Arguments &, const Msp::FS::Path & = Msp::FS::Path(), bool = false); }; #endif