use std::path::Path; use crate::command::cmd::Cmd; use crate::command::env::Env; use crate::command::error::CmdError; use crate::error::BabyError; use crate::share; pub const CALLER: &str = "gitbaby::merge"; pub fn build_merge_base_cmd(dir: &Path, env: Env, one: &str, two: &str) -> Cmd { let args: Vec = vec!["merge-base".into(), one.into(), two.into()]; share::git_cmd(CALLER, dir, env, None, args) } pub fn classify_stderr(stderr: &str, one: &str, two: &str) -> BabyError { if stderr.trim().is_empty() { return BabyError::MergeBaseNotFound(format!("{}..{}", one, two)); } if stderr.contains("fatal: bad revision") { return BabyError::RevisionNotFound(format!("{}..{}", one, two)); } BabyError::Custom(format!("git merge-base failed: {}", stderr.trim())) } pub fn classify_cmd_error(err: CmdError, one: &str, two: &str) -> BabyError { match err { CmdError::NonZeroExit { stderr, .. } => classify_stderr(&stderr, one, two), CmdError::Spawn { prog, source } => share::classify_spawn_error(prog, source), other => BabyError::from(other), } }