X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.h;h=992df5c692a4c7bf8dfd6e6a208d2c64f15afdc0;hb=658c46ea8ef6d7022cb8c8e06565ebce12842d0b;hp=a5f10ec0b0c1486ce6b7b951d8dd10e668923cfb;hpb=666bf60f80a3f220a112c2a97ed00b72871924d3;p=builder.git diff --git a/source/externaltask.h b/source/externaltask.h index a5f10ec..992df5c 100644 --- a/source/externaltask.h +++ b/source/externaltask.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include "task.h" @@ -17,17 +18,17 @@ class ExternalTask: public Task public: enum Destination { - PASSTHROUGH, - CAPTURE, - IGNORE + PASSTHROUGH, //< Do not touch the stream + CAPTURE, //< Capture the stream + IGNORE //< Redirect the stream to oblivion }; - typedef std::vector Arguments; + typedef Msp::Process::Arguments Arguments; private: Arguments argv; Msp::FS::Path work_dir; - int pid; + Msp::Process *process; int exit_code; Destination stdout_dest; Destination stderr_dest; @@ -45,13 +46,19 @@ public: virtual std::string get_command() const; virtual void start(); virtual Status check(); - Status wait(); + virtual Status wait(); private: Status do_wait(bool); public: + /// Sets destination for stdout. Has no effect after the task is started. void set_stdout(Destination); + + /// Sets destination for stderr. Has no effect after the task is started. void set_stderr(Destination); + + /** 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