use std::path::Path;
use std::process::Command;
fn git(dir: &Path) -> Command {
let mut cmd = Command::new("git");
cmd.current_dir(dir);
crate::gitenv::insulate_config(&mut cmd, dir);
crate::gitenv::insulate_repo_location(&mut cmd);
cmd
}
pub(crate) fn repo_with_file(content: &str) -> tempfile::TempDir {
let dir = tempfile::tempdir().unwrap();
std::fs::write(dir.path().join("f"), content).unwrap();
let status = git(dir.path()).arg("init").arg("-q").status().unwrap();
assert!(status.success(), "git init failed in {:?}", dir.path());
dir
}
pub(crate) fn apply_check(diff_bytes: &[u8], dir: &Path) -> bool {
let mut cmd = git(dir);
cmd.arg("apply").arg("--check");
crate::gitenv::feed_and_wait(&mut cmd, diff_bytes)
.unwrap_or_else(|e| panic!("git apply --check in {}: {e}", dir.display()))
.status
.success()
}
pub(crate) fn applies_to_file(diff_bytes: &[u8], content: &str) -> bool {
let dir = repo_with_file(content);
apply_check(diff_bytes, dir.path())
}