mirror of https://github.com/djcb/mu.git
mu-file-utils: add run_command0
To ensure command ran and had exit-code=0 in one go.
This commit is contained in:
parent
ae87be6a48
commit
24add72126
|
@ -162,7 +162,7 @@ Mu::runtime_path(Mu::RuntimePath path, const std::string& muhome)
|
||||||
throw std::logic_error("unknown path");
|
throw std::logic_error("unknown path");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* LCOV_EXCL_START*/
|
||||||
static gpointer
|
static gpointer
|
||||||
cancel_wait(gpointer data)
|
cancel_wait(gpointer data)
|
||||||
{
|
{
|
||||||
|
@ -210,7 +210,7 @@ Mu::g_cancellable_new_with_timeout(guint timeout)
|
||||||
|
|
||||||
return cancel;
|
return cancel;
|
||||||
}
|
}
|
||||||
|
/* LCOV_EXCL_STOP*/
|
||||||
|
|
||||||
Result<std::string>
|
Result<std::string>
|
||||||
Mu::read_from_stdin()
|
Mu::read_from_stdin()
|
||||||
|
@ -286,6 +286,18 @@ Mu::run_command(std::initializer_list<std::string> args, bool try_setsid)
|
||||||
to_string_gchar(std::move(std_err/*consumed*/))});
|
to_string_gchar(std::move(std_err/*consumed*/))});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result<Mu::CommandOutput>
|
||||||
|
Mu::run_command0(std::initializer_list<std::string> args, bool try_setsid)
|
||||||
|
{
|
||||||
|
if (auto&& res{run_command(args, try_setsid)}; !res)
|
||||||
|
return res;
|
||||||
|
else if (res->exit_code != 0)
|
||||||
|
return Err(Error::Code::File, "command ran with non-zero exit code");
|
||||||
|
else
|
||||||
|
return Ok(std::move(*res));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Mu::Option<std::string>
|
Mu::Option<std::string>
|
||||||
Mu::program_in_path(const std::string& name)
|
Mu::program_in_path(const std::string& name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -227,14 +227,14 @@ Result<std::string> make_temp_dir();
|
||||||
Result<void> remove_directory(const std::string& path);
|
Result<void> remove_directory(const std::string& path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run some system command
|
* Run some system command.
|
||||||
*
|
*
|
||||||
* @param args a list of commmand line arguments (like argv)
|
* @param args a list of commmand line arguments (like argv)
|
||||||
* @param try_setsid whether to try setsid(2) (see its manpage for details) if this
|
* @param try_setsid whether to try setsid(2) (see its manpage for details) if this
|
||||||
* system supports it.
|
* system supports it.
|
||||||
*
|
*
|
||||||
* @return Ok(exit code) or an error. Note that exit-code != 0 is _not_
|
* @return Ok(exit code) or an error. Note that exit-code != 0 is _not_ considered an error from the
|
||||||
* considered an error from the perspective of this function.
|
* perspective of run_command, but is for run_command0
|
||||||
*/
|
*/
|
||||||
struct CommandOutput {
|
struct CommandOutput {
|
||||||
int exit_code;
|
int exit_code;
|
||||||
|
@ -243,6 +243,8 @@ struct CommandOutput {
|
||||||
};
|
};
|
||||||
Result<CommandOutput> run_command(std::initializer_list<std::string> args,
|
Result<CommandOutput> run_command(std::initializer_list<std::string> args,
|
||||||
bool try_setsid=false);
|
bool try_setsid=false);
|
||||||
|
Result<CommandOutput> run_command0(std::initializer_list<std::string> args,
|
||||||
|
bool try_setsid=false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to 'play' (ie., open with it's associated program) a file. On MacOS, the
|
* Try to 'play' (ie., open with it's associated program) a file. On MacOS, the
|
||||||
|
|
Loading…
Reference in New Issue