31#include <unordered_map>
46std::vector<std::string>
ArgsToVec(
char** argv);
47std::unordered_map<std::string, std::string>
EnvpToMap(
char** envp);
85 int Wait(siginfo_t* infop,
int options);
141 template <
typename T>
148 template <
typename T,
typename...
Args>
184 return std::move(
SetName(std::move(name)));
200 return std::move(
SetStopper(std::move(stopper)));
206 env_ = std::move(env);
214 const std::string& value) & {
218 const std::string& value) && {
220 return std::move(*
this);
224 env_.emplace_back(std::move(env_var));
234 auto it =
env_.begin();
235 while (it !=
env_.end()) {
253 template <
typename...
Args>
255 std::stringstream ss;
260 template <
typename...
Args>
262 return std::move(
AddParameter(std::forward<Args>(args)...));
266 template <
typename...
Args>
268 CHECK(!
command_.empty()) <<
"There is no parameter to append to.";
269 std::stringstream ss;
274 template <
typename...
Args>
313 std::string
AsBashScript(
const std::string& redirected_stdio_path =
"")
const;
322 std::vector<std::string>
env_{};
340int Execute(
const std::vector<std::string>& commands);
341int Execute(
const std::vector<std::string>& commands,
342 const std::vector<std::string>& envs);
352 const std::vector<std::string>& envs,
Definition: expected.h:86
Definition: subprocess.h:139
Command AddEnvironmentVariable(std::string env_var) &&
Definition: subprocess.h:227
~Command()
Definition: subprocess.cpp:309
Command & AddParameter(Args... args) &
Definition: subprocess.h:254
std::vector< std::string > command_
Definition: subprocess.h:318
std::map< SharedFD, int > inherited_fds_
Definition: subprocess.h:320
void BuildParameter(std::stringstream *stream, T t, Args... args)
Definition: subprocess.h:149
Command SetExecutable(std::string executable) &&
Definition: subprocess.h:175
Command & UnsetFromEnvironment(const std::string &env_var) &
Definition: subprocess.h:233
Command UnsetFromEnvironment(const std::string &env_var) &&
Definition: subprocess.h:244
friend std::ostream & operator<<(std::ostream &out, const Command &command)
Definition: subprocess.cpp:485
Command(std::string executable, SubprocessStopper stopper=KillSubprocess)
Definition: subprocess.cpp:301
Command & SetExecutable(std::string executable) &
Definition: subprocess.h:171
void BuildParameter(std::stringstream *stream, T t)
Definition: subprocess.h:143
std::string GetShortName() const
Definition: subprocess.h:301
Command & AddEnvironmentVariable(std::string env_var) &
Definition: subprocess.h:223
Command & AddEnvironmentVariable(const std::string &env_var, const std::string &value) &
Definition: subprocess.h:213
std::map< Subprocess::StdIOChannel, int > redirects_
Definition: subprocess.h:321
Command & AddPrerequisite(const std::function< Result< void >()> &prerequisite) &
Definition: subprocess.cpp:384
SharedFD working_directory_
Definition: subprocess.h:324
std::string AsBashScript(const std::string &redirected_stdio_path="") const
Definition: subprocess.cpp:511
std::vector< std::string > env_
Definition: subprocess.h:322
Command(const Command &)=delete
const std::string & Executable() const
Definition: subprocess.h:167
Subprocess Start(SubprocessOptions options=SubprocessOptions()) const
Definition: subprocess.cpp:396
std::string ToString() const
Definition: subprocess.cpp:501
Command & SetEnvironment(std::vector< std::string > env) &
Definition: subprocess.h:205
Command & operator=(const Command &)=delete
Command SetExecutableAndName(std::string name) &&
Definition: subprocess.h:191
std::vector< std::function< Result< void >()> > prerequisites_
Definition: subprocess.h:319
Command AppendToLastParameter(Args... args) &&
Definition: subprocess.h:275
Command SetEnvironment(std::vector< std::string > env) &&
Definition: subprocess.h:209
Command & SetName(std::string name) &
Definition: subprocess.h:179
Command AddEnvironmentVariable(const std::string &env_var, const std::string &value) &&
Definition: subprocess.h:217
Command SetStopper(SubprocessStopper stopper) &&
Definition: subprocess.h:199
Command & RedirectStdIO(Subprocess::StdIOChannel channel, SharedFD shared_fd) &
Definition: subprocess.cpp:333
Command & SetExecutableAndName(std::string name) &
Definition: subprocess.h:187
Command(Command &&)=default
Command SetName(std::string name) &&
Definition: subprocess.h:183
Command & AppendToLastParameter(Args... args) &
Definition: subprocess.h:267
Command AddParameter(Args... args) &&
Definition: subprocess.h:261
Command & SetWorkingDirectory(const std::string &path) &
Definition: subprocess.cpp:360
std::optional< std::string > executable_
Definition: subprocess.h:317
SubprocessStopper subprocess_stopper_
Definition: subprocess.h:323
Command & SetStopper(SubprocessStopper stopper) &
Definition: subprocess.h:195
Definition: shared_fd.h:129
Definition: subprocess.h:107
const std::string & Strace() const
Definition: subprocess.h:127
bool InGroup() const
Definition: subprocess.h:126
bool verbose_
Definition: subprocess.h:130
bool ExitWithParent() const
Definition: subprocess.h:125
SubprocessOptions & ExitWithParent(bool exit_with_parent) &
bool Verbose() const
Definition: subprocess.h:124
SubprocessOptions & SandboxArguments(std::vector< std::string >) &
bool in_group_
Definition: subprocess.h:132
SubprocessOptions ExitWithParent(bool exit_with_parent) &&
bool exit_with_parent_
Definition: subprocess.h:131
SubprocessOptions()
Definition: subprocess.h:109
std::string strace_
Definition: subprocess.h:133
SubprocessOptions SandboxArguments(std::vector< std::string >) &&
Definition: subprocess.h:66
bool started_
Definition: subprocess.h:103
std::atomic< pid_t > pid_
Definition: subprocess.h:102
SubprocessStopper stopper_
Definition: subprocess.h:104
Subprocess & operator=(const Subprocess &)=delete
Result< void > SendSignalToGroup(int signal)
Definition: subprocess.cpp:256
Result< void > SendSignal(int signal)
Definition: subprocess.cpp:251
Subprocess(pid_t pid, SubprocessStopper stopper=KillSubprocess)
Definition: subprocess.h:74
StdIOChannel
Definition: subprocess.h:68
Subprocess & operator=(Subprocess &&)
Definition: subprocess.cpp:171
Subprocess(const Subprocess &)=delete
bool Started() const
Definition: subprocess.h:89
int Wait()
Definition: subprocess.cpp:181
StopperResult Stop()
Definition: subprocess.h:91
pid_t pid() const
Definition: subprocess.h:90
#define CHECK(x)
Definition: logging.h:251
bool StartsWith(std::string_view s, std::string_view prefix)
Definition: strings.cpp:91
Definition: alloc_utils.cpp:23
StopperResult KillSubprocess(Subprocess *subprocess)
Definition: subprocess.cpp:261
StopperResult
Definition: subprocess.h:49
std::function< StopperResult(Subprocess *)> SubprocessStopper
Definition: subprocess.h:56
SubprocessStopper KillSubprocessFallback(std::function< StopperResult()> nice)
Definition: subprocess.cpp:284
int Execute(const std::vector< std::string > &commands, const std::vector< std::string > &envs)
Definition: subprocess.cpp:561
std::vector< std::string > ArgsToVec(int argc, char **argv)
Definition: flag_parser.cpp:346
std::ostream & operator<<(std::ostream &out, Arch arch)
Definition: architecture.cpp:67
std::unordered_map< std::string, std::string > EnvpToMap(char **envp)
Definition: subprocess.cpp:105
std::vector< std::string_view > Args
Definition: incremental.h:28
void verbose(const char *fmt,...)
Definition: util.cpp:69