Make Command::run() accept a single string for convenience

We can fall back on the standard constructor when we have dynamic input
This commit is contained in:
Damien Elmes 2023-06-23 11:31:39 +10:00
parent a96d5a920b
commit 5023356dd2
2 changed files with 10 additions and 14 deletions

View file

@ -34,12 +34,10 @@ pub struct Utf8Output {
} }
pub trait CommandExt { pub trait CommandExt {
fn run<I, S>(cmd_and_args: I) -> Result<()> /// A shortcut for when the command and its args are known up-front and have
where /// no spaces in them.
I: IntoIterator<Item = S>, fn run(cmd_and_args: impl AsRef<str>) -> Result<()> {
S: AsRef<OsStr>, let mut all_args = cmd_and_args.as_ref().split(' ');
{
let mut all_args = cmd_and_args.into_iter();
Command::new(all_args.next().unwrap()) Command::new(all_args.next().unwrap())
.args(all_args) .args(all_args)
.ensure_success()?; .ensure_success()?;
@ -111,9 +109,7 @@ mod test {
#[test] #[test]
fn test_run() { fn test_run() {
assert_eq!( assert_eq!(
Command::run(["fakefake", "1", "2"]) Command::run("fakefake 1 2").unwrap_err().to_string(),
.unwrap_err()
.to_string(),
"Failed to execute: fakefake 1 2" "Failed to execute: fakefake 1 2"
); );
#[cfg(not(windows))] #[cfg(not(windows))]

View file

@ -198,14 +198,14 @@ impl LintContext {
} }
fn check_cargo_deny() -> Result<()> { fn check_cargo_deny() -> Result<()> {
Command::run(["cargo", "install", "cargo-deny@0.13.5"])?; Command::run("cargo install cargo-deny@0.13.5")?;
Command::run(["cargo", "deny", "check", "-A", "duplicate"])?; Command::run("cargo deny check -A duplicate")?;
Ok(()) Ok(())
} }
fn update_hakari() -> Result<()> { fn update_hakari() -> Result<()> {
Command::run(["cargo", "install", "cargo-hakari@0.9.23"])?; Command::run("cargo install cargo-hakari@0.9.23")?;
Command::run(["cargo", "hakari", "generate"])?; Command::run("cargo hakari generate")?;
Ok(()) Ok(())
} }
@ -258,7 +258,7 @@ fn check_for_unstaged_changes() {
fn generate_licences() -> Result<String> { fn generate_licences() -> Result<String> {
if which::which("cargo-license").is_err() { if which::which("cargo-license").is_err() {
Command::run(["cargo", "install", "cargo-license@0.5.1"])?; Command::run("cargo install cargo-license@0.5.1")?;
} }
let output = Command::run_with_output([ let output = Command::run_with_output([
"cargo-license", "cargo-license",