summaryrefslogtreecommitdiff
path: root/crates/git-tracker/src/lib.rs
blob: 0bf17dc04898e13c574a7309052c09877d826976 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//! A library that helps you track commits and branches in a Git repository
use log::trace;

mod managed_repository;
mod tracker;
pub use managed_repository::ManagedRepository;
pub use tracker::Tracker;

/// Collect the status of the commit SHA [`commit_sha`] in each of the nixpkgs
/// branches in [`branches`], using the repository at path [`repository_path`]
///
/// NOTE: `branches` should contain the full ref (i.e., `origin/main`)
///
/// # Errors
///
/// Will return [`Err`] if we can't start tracking a repository at the given path,
/// or if we can't determine if the branch has given commit
pub fn collect_statuses_in(
	repository_path: &str,
	commit_sha: &str,
	branches: &Vec<String>,
) -> Result<Vec<(String, bool)>, tracker::Error> {
	// start tracking nixpkgs
	let tracker = Tracker::from_path(repository_path)?;

	// check to see what branches it's in
	let mut status_results = Vec::new();
	for branch_name in branches {
		trace!("Checking for commit in {branch_name}");
		let has_pr = tracker.branch_contains_sha(branch_name, commit_sha)?;
		status_results.push((branch_name.to_string(), has_pr));
	}

	Ok(status_results)
}