]> git.tdb.fi Git - builder.git/blobdiff - source/externaltask.h
Remove most container typedefs and refactor others
[builder.git] / source / externaltask.h
index 992df5c692a4c7bf8dfd6e6a208d2c64f15afdc0..3de1e4ac139946f26654f1fda57a2dbb65fef2ae 100644 (file)
@@ -16,22 +16,26 @@ 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
        };
 
-       typedef Msp::Process::Arguments Arguments;
+       using Arguments = Msp::Process::Arguments;
 
 private:
        Arguments argv;
        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;
 
@@ -41,29 +45,35 @@ public:
        name.  If the working directory is not specified, no chdir is done. */
        ExternalTask(const Arguments &, const Msp::FS::Path & = Msp::FS::Path());
 
-       virtual ~ExternalTask();
+       ~ExternalTask();
 
-       virtual std::string get_command() const;
-       virtual void start();
-       virtual Status check();
-       virtual Status wait();
+       std::string get_command() const override;
+       void start() override;
+       Status check() override;
+       Status wait() override;
 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