Skip to main content

repo_init_and_open/
repo_init_and_open.rs

1//! Initialise a repository and open it again with [`Repository::open`] and [`Repository::discover`].
2//!
3//! Run: `cargo run -p grit-lib --example repo_init_and_open`
4
5use grit_lib::repo::{init_repository, Repository};
6use std::fs;
7
8fn main() -> grit_lib::error::Result<()> {
9    let root = tempfile::tempdir()?;
10    let path = root.path();
11
12    let repo = init_repository(path, false, "main", None, "files")?;
13    println!("opened after init: git_dir = {}", repo.git_dir.display());
14    println!("work tree: {}", repo.work_tree.as_ref().unwrap().display());
15
16    let again = Repository::open(&repo.git_dir, repo.work_tree.as_deref())?;
17    println!("re-open by path: bare = {}", again.is_bare());
18
19    let marker = path.join("marker.txt");
20    fs::write(&marker, b"inside work tree\n")?;
21    let sub = path.join("subdir");
22    fs::create_dir_all(&sub)?;
23    assert!(std::env::set_current_dir(&sub).is_ok());
24    let discovered = Repository::discover(None)?;
25    println!(
26        "discover from subdir: same git_dir = {}",
27        discovered.git_dir == repo.git_dir
28    );
29
30    Ok(())
31}