Skip to main content

history/
history.rs

1//! Run `cargo run --example history -- /path/to/repo <commit-id> [other-commit-id]`.
2use std::path::PathBuf;
3
4use clap::Parser;
5use girt::{ObjectId, Repo};
6
7#[derive(Parser)]
8#[command(about, long_about = None)]
9struct Args {
10    /// Repository to open.
11    path: PathBuf,
12    /// Commit to walk history from.
13    commit: ObjectId,
14    /// Second commit for ancestor and merge-base queries.
15    other_commit: Option<ObjectId>,
16}
17
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19    let args = Args::parse();
20    let root = args.commit;
21    let git = Repo::discover(args.path)?;
22
23    for entry in git.log(root)? {
24        let (id, _) = entry?;
25        println!("{id}");
26    }
27
28    if let Some(other) = args.other_commit {
29        let objects = git.repository().objects()?;
30        println!("ancestor: {}", objects.is_ancestor(root, other)?);
31        println!("merge bases: {:?}", objects.merge_bases(root, other)?);
32    }
33
34    Ok(())
35}