upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/test_utils/src/git.rs
diff options
context:
space:
mode:
Diffstat (limited to 'test_utils/src/git.rs')
-rw-r--r--test_utils/src/git.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/test_utils/src/git.rs b/test_utils/src/git.rs
index a18f81c..2668b3f 100644
--- a/test_utils/src/git.rs
+++ b/test_utils/src/git.rs
@@ -276,6 +276,49 @@ impl GitTestRepo {
276 Ok(()) 276 Ok(())
277 } 277 }
278 278
279 /// Creates a git worktree linked to this repository.
280 /// Returns a `GitTestRepo` whose `dir` points to the worktree working
281 /// directory.
282 pub fn create_worktree(&self, branch_name: &str) -> Result<GitTestRepo> {
283 let worktree_path = self
284 .dir
285 .parent()
286 .unwrap()
287 .join(format!("tmpgit-worktree-{}", rand::random::<u64>()));
288
289 // Create the branch at the current HEAD
290 let head_commit = self.git_repo.head()?.peel_to_commit()?;
291 self.git_repo
292 .branch(branch_name, &head_commit, false)
293 .context("failed to create branch for worktree")?;
294
295 // Add worktree via git2
296 let worktree = self
297 .git_repo
298 .worktree(
299 branch_name,
300 &worktree_path,
301 Some(
302 git2::WorktreeAddOptions::new().reference(Some(
303 &self
304 .git_repo
305 .find_branch(branch_name, git2::BranchType::Local)?
306 .into_reference(),
307 )),
308 ),
309 )
310 .context("failed to create worktree")?;
311
312 let worktree_repo = git2::Repository::open_from_worktree(&worktree)
313 .context("failed to open repo from worktree")?;
314
315 Ok(GitTestRepo {
316 dir: worktree_path,
317 git_repo: worktree_repo,
318 delete_dir_on_drop: true,
319 })
320 }
321
279 pub fn checkout_remote_branch(&self, branch_name: &str) -> Result<Oid> { 322 pub fn checkout_remote_branch(&self, branch_name: &str) -> Result<Oid> {
280 self.checkout(&format!("remotes/origin/{branch_name}"))?; 323 self.checkout(&format!("remotes/origin/{branch_name}"))?;
281 let mut branch = self.create_branch(branch_name)?; 324 let mut branch = self.create_branch(branch_name)?;