use crate::{ bare::GitBare, cmd::oid::ObjectId, errors::{GitError, GitResult}, }; impl GitBare { pub fn merge_base_many( &self, commits: Vec, ) -> GitResult { if commits.len() < 2 { return Err(GitError::ParseError( "merge_base_many requires at least 2 commits".to_string(), )); } let repo = self.gix_repo()?; let gix_commits: Vec = commits .iter() .map(|id| id.try_into()) .collect::, _>>()?; let first = gix_commits[0]; let others = &gix_commits[1..]; let bases = repo.merge_bases_many(first, others)?; let base = bases.first().ok_or_else(|| { GitError::ObjectNotFound( "no common merge base found for the given commits".to_string(), ) })?; Ok(ObjectId::new(base.detach().to_hex().to_string())) } }