#include <msp/io/pipe.h>
#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:
std::string output;
public:
+ /** 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