use std::env;
use std::path::Path;
use std::process::Command;
use git_workarea::{CommitId, GitContext};
use tempfile::TempDir;
pub fn make_temp_dir() -> TempDir {
let mut working_dir = env::current_exe().unwrap();
working_dir.pop();
TempDir::new_in(working_dir).unwrap()
}
pub fn make_context_submodule(gitdir: &Path, commit: &CommitId) -> GitContext {
let gitdir = gitdir.join("origin");
let clone = Command::new("git")
.arg("clone")
.arg(concat!(env!("CARGO_MANIFEST_DIR"), "/../.git"))
.arg(&gitdir)
.output()
.unwrap();
if !clone.status.success() {
panic!(
"origin clone failed: {}",
String::from_utf8_lossy(&clone.stderr),
);
}
let ctx = GitContext::new(gitdir.join(".git"));
let checkout = ctx
.git()
.arg("checkout")
.arg(commit.as_str())
.current_dir(&gitdir)
.output()
.unwrap();
if !checkout.status.success() {
panic!(
"checkout failed: {}",
String::from_utf8_lossy(&checkout.stderr),
);
}
let submodule_update = ctx
.git()
.arg("submodule")
.arg("update")
.arg("--init")
.current_dir(&gitdir)
.output()
.unwrap();
if !submodule_update.status.success() {
panic!(
"submodule update failed: {}",
String::from_utf8_lossy(&submodule_update.stderr),
);
}
ctx
}