commit_graph_open_phases/
commit_graph_open_phases.rs1use std::time::Instant;
4
5use girt::commit_graph::CommitGraph;
6use girt::{PackLimits, Repository};
7
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let mut args = std::env::args().skip(1);
10 let path = args.next().ok_or("repository path required")?;
11 let rounds: usize = args.next().map_or(Ok(3), |r| r.parse())?;
12 for _ in 0..rounds {
13 let start = Instant::now();
14 let repo = Repository::open(&path)?;
15 let objects = repo
16 .objects_with(PackLimits::trusted())?
17 .without_commit_graph();
18 let opened = start.elapsed();
19 let start = Instant::now();
20 let bytes = std::fs::read(repo.object_dir().join("info/commit-graph"))?;
21 let read = start.elapsed();
22 let start = Instant::now();
23 let graph = CommitGraph::parse(&bytes, repo.object_format())?;
24 let parsed = start.elapsed();
25 let start = Instant::now();
26 let objects = objects.with_commit_graph(graph)?;
27 let attached = start.elapsed();
28 let start = Instant::now();
29 drop(objects);
30 let dropped = start.elapsed();
31 let start = Instant::now();
32 let full = Repository::open(&path)?.objects_with(PackLimits::trusted())?;
33 let total = start.elapsed();
34 drop(full);
35 eprintln!(
36 "repo+packs={opened:?} read={read:?} parse={parsed:?} attach={attached:?} drop={dropped:?} default_open={total:?}"
37 );
38 }
39 Ok(())
40}