git_assist/
git.rs

1use git2::{Commit as GitCommit, Error as GitError, Oid, Repository as GitRepository};
2
3pub(crate) fn commits_of_branch<'a>(
4    repository: &'a GitRepository,
5    branch: Oid,
6) -> Result<Vec<GitCommit<'a>>, GitError> {
7    let mut revwalk = repository.revwalk()?;
8
9    revwalk.push(branch)?;
10
11    revwalk.simplify_first_parent()?;
12
13    Ok(revwalk
14        .flatten()
15        .map(|oid| repository.find_commit(oid).unwrap())
16        .collect())
17}
18
19pub(crate) fn commits_in_range<'a>(
20    repository: &'a GitRepository,
21    range: (Oid, Oid),
22) -> Result<Vec<GitCommit<'a>>, GitError> {
23    let mut revwalk = repository.revwalk()?;
24
25    revwalk.hide(range.0)?;
26    revwalk.push(range.1)?;
27
28    revwalk.simplify_first_parent()?;
29
30    Ok(revwalk
31        .flatten()
32        .map(|oid| repository.find_commit(oid).unwrap())
33        .collect())
34}