use std::process::Command;
pub fn resolve(explicit: Option<String>) -> String {
if let Some(a) = explicit.filter(|s| !s.trim().is_empty()) {
return a;
}
if let Ok(a) = std::env::var("WIPE_AUTHOR") {
if !a.trim().is_empty() {
return a;
}
}
match (git_config("user.name"), git_config("user.email")) {
(Some(name), Some(email)) => format!("{name} <{email}>"),
(Some(name), None) => name,
(None, Some(email)) => email,
(None, None) => "unknown".to_string(),
}
}
fn git_config(key: &str) -> Option<String> {
let out = Command::new("git")
.args(["config", "--get", key])
.output()
.ok()?;
if !out.status.success() {
return None;
}
let val = String::from_utf8(out.stdout).ok()?.trim().to_string();
if val.is_empty() {
None
} else {
Some(val)
}
}
pub fn git_available() -> bool {
Command::new("git")
.arg("--version")
.output()
.map(|o| o.status.success())
.unwrap_or(false)
}