1use agm_core::git_stat::GitStat;
2
3pub fn run(cwd: &str) -> GitStat {
4 let Ok(repo) = git2::Repository::discover(cwd) else {
5 return GitStat::default();
6 };
7
8 let (insertions, deletions) = repo
9 .diff_index_to_workdir(None, None)
10 .and_then(|d| d.stats())
11 .map_or((0, 0), |s| (s.insertions(), s.deletions()));
12
13 let new_files = repo
14 .statuses(Some(
15 git2::StatusOptions::new()
16 .include_untracked(true)
17 .recurse_untracked_dirs(true)
18 .exclude_submodules(true)
19 .include_ignored(false),
20 ))
21 .map_or(0, |st| {
22 st.iter().filter(|s| s.status().contains(git2::Status::WT_NEW)).count()
23 });
24
25 let is_worktree = repo.is_worktree();
26
27 GitStat {
28 insertions,
29 deletions,
30 new_files,
31 is_worktree,
32 }
33}