From ba47a4bcd67cd78b5909b012b08c12498aab3383 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Sat, 5 Jul 2025 11:39:45 -0600 Subject: [PATCH] better git testing --- Cargo.toml | 1 + src/git.rs | 30 ++++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 03db057..addd833 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2024" anyhow = "1.0.95" clap = { version = "4.5.26", features = ["derive"] } mktemp = "0.5.1" +rand = "0.9.1" serde = { version = "1.0.217", features = ["derive"] } thiserror = "2.0.11" toml = "0.8.19" diff --git a/src/git.rs b/src/git.rs index b3e74ad..8d1ce46 100644 --- a/src/git.rs +++ b/src/git.rs @@ -23,8 +23,7 @@ pub fn checkout_branch_in_worktree( Ok(()) } -pub fn remove_worktree(worktree_dir: &std::path::Path) -> Result<(), GitError> { - std::fs::remove_dir_all(worktree_dir)?; +pub fn git_worktree_prune() -> Result<(), GitError> { let result = std::process::Command::new("git") .args(["worktree", "prune"]) .output()?; @@ -36,6 +35,18 @@ pub fn remove_worktree(worktree_dir: &std::path::Path) -> Result<(), GitError> { Ok(()) } +pub fn git_remove_branch(branch: &str) -> Result<(), GitError> { + let result = std::process::Command::new("git") + .args(["branch", "-D", branch]) + .output()?; + if !result.status.success() { + println!("stdout: {}", std::str::from_utf8(&result.stdout).unwrap()); + println!("stderr: {}", std::str::from_utf8(&result.stderr).unwrap()); + return Err(GitError::Oops); + } + Ok(()) +} + pub fn create_orphan_branch(branch: &str) -> Result<(), GitError> { { let tmp_worktree = mktemp::Temp::new_path(); @@ -108,13 +119,20 @@ mod tests { #[test] fn test_worktree() { - let worktree_dir = std::path::Path::new("/tmp/boo"); - checkout_branch_in_worktree("origin/main", worktree_dir).unwrap(); - remove_worktree(worktree_dir).unwrap(); + { + let temp_worktree = mktemp::Temp::new_path(); + checkout_branch_in_worktree("origin/main", temp_worktree.as_path()).unwrap(); + // The temporary worktree directory is removed when the Temp variable is dropped. + } + git_worktree_prune().unwrap(); } #[test] fn test_create_orphan_branch() { - create_orphan_branch("bloppers").unwrap(); + let rnd: u128 = rand::random(); + let mut branch = std::string::String::from("entomologist-test-branch-"); + branch.push_str(&format!("{:0x}", rnd)); + create_orphan_branch(&branch).unwrap(); + git_remove_branch(&branch).unwrap(); } }