Move cmd to a separate dir
This commit is contained in:
parent
91f9bc2b86
commit
64f0510d18
53
xtask/src/cmd.rs
Normal file
53
xtask/src/cmd.rs
Normal file
@ -0,0 +1,53 @@
|
||||
use std::process::{Command, Output, Stdio};
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
|
||||
use crate::project_root;
|
||||
|
||||
pub struct Cmd<'a> {
|
||||
pub unix: &'a str,
|
||||
pub windows: &'a str,
|
||||
pub work_dir: &'a str,
|
||||
}
|
||||
|
||||
impl Cmd<'_> {
|
||||
pub fn run(self) -> Result<()> {
|
||||
if cfg!(windows) {
|
||||
run(self.windows, self.work_dir)
|
||||
} else {
|
||||
run(self.unix, self.work_dir)
|
||||
}
|
||||
}
|
||||
pub fn run_with_output(self) -> Result<Output> {
|
||||
if cfg!(windows) {
|
||||
run_with_output(self.windows, self.work_dir)
|
||||
} else {
|
||||
run_with_output(self.unix, self.work_dir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run(cmdline: &str, dir: &str) -> Result<()> {
|
||||
do_run(cmdline, dir, &mut |c| {
|
||||
c.stdout(Stdio::inherit());
|
||||
})
|
||||
.map(|_| ())
|
||||
}
|
||||
|
||||
pub fn run_with_output(cmdline: &str, dir: &str) -> Result<Output> {
|
||||
do_run(cmdline, dir, &mut |_| {})
|
||||
}
|
||||
|
||||
fn do_run(cmdline: &str, dir: &str, f: &mut dyn FnMut(&mut Command)) -> Result<Output> {
|
||||
eprintln!("\nwill run: {}", cmdline);
|
||||
let proj_dir = project_root().join(dir);
|
||||
let mut args = cmdline.split_whitespace();
|
||||
let exec = args.next().unwrap();
|
||||
let mut cmd = Command::new(exec);
|
||||
f(cmd.args(args).current_dir(proj_dir).stderr(Stdio::inherit()));
|
||||
let output = cmd.output().with_context(|| format!("running `{}`", cmdline))?;
|
||||
if !output.status.success() {
|
||||
anyhow::bail!("`{}` exited with {}", cmdline, output.status);
|
||||
}
|
||||
Ok(output)
|
||||
}
|
@ -1,20 +1,23 @@
|
||||
//! FIXME: write short doc here
|
||||
|
||||
mod cmd;
|
||||
pub mod codegen;
|
||||
pub mod install;
|
||||
pub mod pre_commit;
|
||||
mod ast_src;
|
||||
|
||||
use anyhow::Context;
|
||||
pub use anyhow::Result;
|
||||
use std::{
|
||||
env,
|
||||
path::{Path, PathBuf},
|
||||
process::{Command, Output, Stdio},
|
||||
process::{Command, Stdio},
|
||||
};
|
||||
|
||||
use crate::codegen::Mode;
|
||||
|
||||
pub use anyhow::Result;
|
||||
pub use cmd::{run, run_with_output, Cmd};
|
||||
|
||||
const TOOLCHAIN: &str = "stable";
|
||||
|
||||
pub fn project_root() -> PathBuf {
|
||||
@ -27,40 +30,6 @@ pub fn project_root() -> PathBuf {
|
||||
.to_path_buf()
|
||||
}
|
||||
|
||||
pub struct Cmd<'a> {
|
||||
pub unix: &'a str,
|
||||
pub windows: &'a str,
|
||||
pub work_dir: &'a str,
|
||||
}
|
||||
|
||||
impl Cmd<'_> {
|
||||
pub fn run(self) -> Result<()> {
|
||||
if cfg!(windows) {
|
||||
run(self.windows, self.work_dir)
|
||||
} else {
|
||||
run(self.unix, self.work_dir)
|
||||
}
|
||||
}
|
||||
pub fn run_with_output(self) -> Result<Output> {
|
||||
if cfg!(windows) {
|
||||
run_with_output(self.windows, self.work_dir)
|
||||
} else {
|
||||
run_with_output(self.unix, self.work_dir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run(cmdline: &str, dir: &str) -> Result<()> {
|
||||
do_run(cmdline, dir, |c| {
|
||||
c.stdout(Stdio::inherit());
|
||||
})
|
||||
.map(|_| ())
|
||||
}
|
||||
|
||||
pub fn run_with_output(cmdline: &str, dir: &str) -> Result<Output> {
|
||||
do_run(cmdline, dir, |_| {})
|
||||
}
|
||||
|
||||
pub fn run_rustfmt(mode: Mode) -> Result<()> {
|
||||
match Command::new("rustup")
|
||||
.args(&["run", TOOLCHAIN, "--", "cargo", "fmt", "--version"])
|
||||
@ -132,20 +101,3 @@ pub fn run_fuzzer() -> Result<()> {
|
||||
|
||||
run("rustup run nightly -- cargo fuzz run parser", "./crates/ra_syntax")
|
||||
}
|
||||
|
||||
fn do_run<F>(cmdline: &str, dir: &str, mut f: F) -> Result<Output>
|
||||
where
|
||||
F: FnMut(&mut Command),
|
||||
{
|
||||
eprintln!("\nwill run: {}", cmdline);
|
||||
let proj_dir = project_root().join(dir);
|
||||
let mut args = cmdline.split_whitespace();
|
||||
let exec = args.next().unwrap();
|
||||
let mut cmd = Command::new(exec);
|
||||
f(cmd.args(args).current_dir(proj_dir).stderr(Stdio::inherit()));
|
||||
let output = cmd.output().with_context(|| format!("running `{}`", cmdline))?;
|
||||
if !output.status.success() {
|
||||
anyhow::bail!("`{}` exited with {}", cmdline, output.status);
|
||||
}
|
||||
Ok(output)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user