{
let directory = tempfile::tempdir()?;
let upstream = girt::Repository::init(
girt::ObjectFormat::Sha1,
directory.path().join("upstream.git"),
girt::InitKind::Bare,
)?;
let person = girt::Signature {
name: b"A. Writer".to_vec(),
email: b"writer@example.com".to_vec(),
seconds: 1_700_000_000,
offset_minutes: 0,
};
let loose = upstream.loose_objects();
let main = loose.write_commit(&girt::Commit::new(girt::CommitFields {
tree: loose.write_tree(&girt::Tree::new(girt::ObjectFormat::Sha1, vec![])?)?,
parents: vec![],
author: person.clone(),
committer: person.clone(),
extra_headers: vec![],
message: b"Initial commit\n".to_vec(),
})?)?;
upstream.references()?.update_without_reflog(
&girt::refs::RefName::new("refs/heads/main")?,
girt::refs::Target::Direct(main),
girt::refs::Expected::Absent,
)?;
let local_path = directory.path().join("local");
let local = girt::Repository::init(
girt::ObjectFormat::Sha1,
&local_path,
girt::InitKind::Worktree,
)?;
let mut edit = local.edit_config(1 << 20)?;
girt::remote::RemoteConfig::new(edit.document_mut()).add(
b"origin",
b"../upstream.git",
&[b"+refs/heads/*:refs/remotes/origin/*"],
)?;
edit.commit()?;
let repo = girt::Repository::open(&local_path)?;
(directory, upstream, repo, main, person)
}