diff --git a/Cargo.toml b/Cargo.toml index addd833..03db057 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,6 @@ 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 8d1ce46..f8c5465 100644 --- a/src/git.rs +++ b/src/git.rs @@ -23,7 +23,8 @@ pub fn checkout_branch_in_worktree( Ok(()) } -pub fn git_worktree_prune() -> Result<(), GitError> { +pub fn remove_worktree(worktree_dir: &std::path::Path) -> Result<(), GitError> { + std::fs::remove_dir_all(worktree_dir)?; let result = std::process::Command::new("git") .args(["worktree", "prune"]) .output()?; @@ -35,46 +36,22 @@ pub fn git_worktree_prune() -> 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(); - create_orphan_branch_at_path(branch, &tmp_worktree.to_path_buf())?; - } - // The temp dir is now removed / cleaned up. - - let result = std::process::Command::new("git") - .args(["worktree", "prune"]) - .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_at_path( - branch: &str, - worktree_path: &std::path::PathBuf, -) -> Result<(), GitError> { - let Some(worktree_dir) = worktree_path.to_str() else { + let tmp_worktree = mktemp::Temp::new_path(); + let tmp_worktree_pathbuf = tmp_worktree.to_path_buf(); + let Some(tmp_worktree_dir) = tmp_worktree_pathbuf.as_path().to_str() else { return Err(GitError::Oops); }; let result = std::process::Command::new("git") - .args(["worktree", "add", "--orphan", "-b", branch, worktree_dir]) + .args([ + "worktree", + "add", + "--orphan", + "-b", + branch, + tmp_worktree_dir, + ]) .output()?; if !result.status.success() { println!("stdout: {}", std::str::from_utf8(&result.stdout).unwrap()); @@ -82,8 +59,10 @@ pub fn create_orphan_branch_at_path( return Err(GitError::Oops); } - let mut readme_filename = worktree_path.clone(); + let mut readme_filename = tmp_worktree_pathbuf.clone(); readme_filename.push("README.md"); + println!("readme_filename: {:?}", readme_filename); + println!("tmp_worktree_pathbuf: {:?}", tmp_worktree_pathbuf); let mut readme = std::fs::File::create(readme_filename)?; write!( readme, @@ -92,7 +71,7 @@ pub fn create_orphan_branch_at_path( let result = std::process::Command::new("git") .args(["add", "README.md"]) - .current_dir(worktree_dir) + .current_dir(tmp_worktree_dir) .output()?; if !result.status.success() { println!("stdout: {}", std::str::from_utf8(&result.stdout).unwrap()); @@ -102,7 +81,7 @@ pub fn create_orphan_branch_at_path( let result = std::process::Command::new("git") .args(["commit", "-m", "create entomologist issue branch"]) - .current_dir(worktree_path) + .current_dir(tmp_worktree_dir) .output()?; if !result.status.success() { println!("stdout: {}", std::str::from_utf8(&result.stdout).unwrap()); @@ -110,6 +89,8 @@ pub fn create_orphan_branch_at_path( return Err(GitError::Oops); } + // git worktree prune + Ok(()) } @@ -119,20 +100,13 @@ mod tests { #[test] fn test_worktree() { - { - 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(); + let worktree_dir = std::path::Path::new("/tmp/boo"); + checkout_branch_in_worktree("origin/main", worktree_dir).unwrap(); + remove_worktree(worktree_dir).unwrap(); } #[test] fn test_create_orphan_branch() { - 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(); + create_orphan_branch("bloppers").unwrap(); } }