nix: attempt to fix VM tests; general cleanup
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I65f6909ef02ab4599f5b0bbc0930367e6a6a6964
This commit is contained in:
parent
83071514a3
commit
a2b638d4db
26 changed files with 2320 additions and 2939 deletions
|
|
@ -16,7 +16,9 @@ pub fn clone_or_fetch(
|
|||
) -> Result<(PathBuf, String)> {
|
||||
let repo_path = work_dir.join(project_name);
|
||||
|
||||
let repo = if repo_path.exists() {
|
||||
let is_fetch = repo_path.exists();
|
||||
|
||||
let repo = if is_fetch {
|
||||
let repo = Repository::open(&repo_path)?;
|
||||
// Fetch origin — scope the borrow so `remote` is dropped before we move
|
||||
// `repo`
|
||||
|
|
@ -29,21 +31,35 @@ pub fn clone_or_fetch(
|
|||
Repository::clone(url, &repo_path)?
|
||||
};
|
||||
|
||||
// Resolve commit: use specific branch ref or fall back to HEAD
|
||||
let hash = if let Some(branch_name) = branch {
|
||||
let refname = format!("refs/remotes/origin/{branch_name}");
|
||||
let reference = repo.find_reference(&refname).map_err(|e| {
|
||||
fc_common::error::CiError::NotFound(format!(
|
||||
"Branch '{branch_name}' not found ({refname}): {e}"
|
||||
))
|
||||
})?;
|
||||
let commit = reference.peel_to_commit()?;
|
||||
commit.id().to_string()
|
||||
} else {
|
||||
let head = repo.head()?;
|
||||
let commit = head.peel_to_commit()?;
|
||||
commit.id().to_string()
|
||||
// Resolve commit from remote refs (which are always up-to-date after fetch).
|
||||
// When no branch is specified, detect the default branch from local HEAD's
|
||||
// tracking target.
|
||||
let branch_name = match branch {
|
||||
Some(b) => b.to_string(),
|
||||
None => {
|
||||
let head = repo.head()?;
|
||||
head.shorthand().unwrap_or("master").to_string()
|
||||
},
|
||||
};
|
||||
|
||||
let remote_ref = format!("refs/remotes/origin/{branch_name}");
|
||||
let reference = repo.find_reference(&remote_ref).map_err(|e| {
|
||||
fc_common::error::CiError::NotFound(format!(
|
||||
"Branch '{branch_name}' not found ({remote_ref}): {e}"
|
||||
))
|
||||
})?;
|
||||
let commit = reference.peel_to_commit()?;
|
||||
let hash = commit.id().to_string();
|
||||
|
||||
// After fetch, update the working tree so nix evaluation sees the latest
|
||||
// files. Skip on fresh clone since the checkout is already current.
|
||||
if is_fetch {
|
||||
repo.checkout_tree(
|
||||
commit.as_object(),
|
||||
Some(git2::build::CheckoutBuilder::new().force()),
|
||||
)?;
|
||||
repo.set_head_detached(commit.id())?;
|
||||
}
|
||||
|
||||
Ok((repo_path, hash))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue