+++ /dev/null
-#ifndef EXTERNALTASK_H_
-#define EXTERNALTASK_H_
-
-#include <string>
-#include <vector>
-#include <msp/fs/path.h>
-#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:
- enum Destination
- {
- PASSTHROUGH,
- CAPTURE,
- IGNORE
- };
-
- typedef std::vector<std::string> Arguments;
-
-private:
- Arguments argv;
- Msp::FS::Path work_dir;
- int pid;
- int exit_code;
- Destination stdout_dest;
- Destination stderr_dest;
- Msp::IO::Pipe *capture_pipe;
- 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();
-
- 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