use crate::utils::error::Result;
use super::{
cache::{build_cache, store_cache},
common::{find_codeowners_files, find_files, get_repo_hash},
parser::parse_codeowners,
types::{CacheEncoding, CodeownersCache, CodeownersEntry},
};
pub fn parse_repo(repo: &std::path::Path, cache_file: &std::path::Path) -> Result<CodeownersCache> {
println!("Parsing CODEOWNERS files at {}", repo.display());
let codeowners_files = find_codeowners_files(repo)?;
let parsed_codeowners: Vec<CodeownersEntry> = codeowners_files
.iter()
.filter_map(|file| {
let parsed = parse_codeowners(file).ok()?;
Some(parsed)
})
.flatten()
.collect();
let files = find_files(repo)?;
let hash = get_repo_hash(repo)?;
let cache = build_cache(parsed_codeowners, files, hash)?;
store_cache(&cache, &repo.join(cache_file), CacheEncoding::Bincode)?;
println!("CODEOWNERS parsing completed successfully");
Ok(cache)
}