X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.h;h=a5f10ec0b0c1486ce6b7b951d8dd10e668923cfb;hb=30b1243ff16b908ae18b4ab9d70f772c9196b949;hp=c9bc823112db7b3cb55eb7eeea043b2a94f140d1;hpb=47b06998f4f1c896928cee1911de3f7a43b283f4;p=builder.git diff --git a/source/externaltask.h b/source/externaltask.h index c9bc823..a5f10ec 100644 --- a/source/externaltask.h +++ b/source/externaltask.h @@ -7,6 +7,11 @@ #include #include "task.h" +/** +Runs an external command. A zero exit status is translated to a SUCCESS status +for the task, and anything else is treated as an error. Output can optionally +be captured. +*/ class ExternalTask: public Task { public: @@ -30,16 +35,28 @@ private: std::string output; public: - ExternalTask(const Arguments &, const Msp::FS::Path &); + /** Creates an ExternalTask with an argument array and an optional working + directory. The first element of the argument array should be the command + name. If the working directory is not specified, no chdir is done. */ + ExternalTask(const Arguments &, const Msp::FS::Path & = Msp::FS::Path()); + virtual ~ExternalTask(); virtual std::string get_command() const; virtual void start(); virtual Status check(); + Status wait(); +private: + Status do_wait(bool); +public: void set_stdout(Destination); void set_stderr(Destination); 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()); }; #endif