use crate::jj::JjError;
pub trait JjRunner: Send + Sync {
fn run_jj(
&self,
args: &[&str],
) -> impl std::future::Future<Output = Result<String, JjError>> + Send;
}
pub struct RealJjRunner;
impl JjRunner for RealJjRunner {
async fn run_jj(&self, args: &[&str]) -> Result<String, JjError> {
let output = tokio::process::Command::new("jj")
.arg("--config")
.arg("ui.paginate=never")
.args(args)
.output()
.await
.map_err(JjError::NotFound)?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
return Err(JjError::CommandFailed { stderr });
}
Ok(String::from_utf8_lossy(&output.stdout).to_string())
}
}