dashboard: distinguish missing-dir vs missing-git in approval_diff

This commit is contained in:
müde 2026-05-15 01:16:57 +02:00
parent 9af5234f74
commit 99867195e5

View file

@ -157,14 +157,22 @@ async fn render_approvals(approvals: &[Approval]) -> String {
} }
async fn approval_diff(agent: &str, commit_ref: &str) -> String { async fn approval_diff(agent: &str, commit_ref: &str) -> String {
let applied = Coordinator::agent_applied_dir(agent).join("agent.nix");
let proposed = Coordinator::agent_proposed_dir(agent); let proposed = Coordinator::agent_proposed_dir(agent);
if !proposed.exists() {
return format!(
"(proposed dir {} does not exist — agent destroyed?)",
proposed.display()
);
}
if !proposed.join(".git").exists() {
return format!("(no git repo at {})", proposed.display());
}
let applied = Coordinator::agent_applied_dir(agent).join("agent.nix");
let applied_text = std::fs::read_to_string(&applied).unwrap_or_default(); let applied_text = std::fs::read_to_string(&applied).unwrap_or_default();
let proposed_text = match git_show(&proposed, commit_ref).await { match git_show(&proposed, commit_ref).await {
Ok(s) => s, Ok(s) => unified_diff(&applied_text, &s),
Err(e) => return format!("(error reading proposed agent.nix: {e:#})"), Err(e) => format!("(error: {e:#})"),
}; }
unified_diff(&applied_text, &proposed_text)
} }
async fn git_show(proposed_dir: &Path, commit_ref: &str) -> Result<String> { async fn git_show(proposed_dir: &Path, commit_ref: &str) -> Result<String> {
@ -173,7 +181,13 @@ async fn git_show(proposed_dir: &Path, commit_ref: &str) -> Result<String> {
.args(["show", &format!("{commit_ref}:agent.nix")]) .args(["show", &format!("{commit_ref}:agent.nix")])
.output() .output()
.await .await
.context("git show")?; .with_context(|| {
format!(
"spawn `git show` in {} (HYPERHIVE_GIT={})",
proposed_dir.display(),
std::env::var("HYPERHIVE_GIT").unwrap_or_else(|_| "<unset>".into()),
)
})?;
if !out.status.success() { if !out.status.success() {
anyhow::bail!( anyhow::bail!(
"git show {commit_ref}:agent.nix failed: {}", "git show {commit_ref}:agent.nix failed: {}",