Skip to main content

gitkit_cli/git/
contributions.rs

1use git2::DiffStats;
2
3use super::kit::KitRepo;
4
5#[derive(Debug, Default)]
6pub struct Contribution {
7    pub commits: usize,
8    pub insertions: usize,
9    pub deletions: usize,
10}
11
12impl Contribution {
13    pub fn add_stats(&mut self, stats: DiffStats) {
14        self.commits += 1;
15        self.insertions += stats.insertions();
16        self.deletions += stats.deletions();
17    }
18}
19
20impl KitRepo {
21    pub fn get_entire_repo_contribution(&self) -> Result<Contribution, git2::Error> {
22        let mut contrib = Contribution::default();
23        for commit in self.iter_raw_commits()? {
24            let diff = self.get_parent_diff(&commit, None)?; // TODO add opts argument
25            let stats = diff.stats()?;
26
27            contrib.add_stats(stats);
28        }
29        Ok(contrib)
30    }
31
32    pub fn get_lifetime_contributions(&self, email: String) -> Result<Contribution, git2::Error> {
33        let mut contrib = Contribution::default();
34        for commit in self.get_raw_author_commits(&email)? {
35            let diff = self.get_parent_diff(&commit, None)?; // TODO add opts argument
36            let stats = diff.stats()?;
37            contrib.add_stats(stats);
38        }
39
40        Ok(contrib)
41    }
42}