huskies: merge 757

This commit is contained in:
dave
2026-04-27 23:31:57 +00:00
parent dffa05d703
commit 7ee542dd1e
7 changed files with 571 additions and 177 deletions
+18 -46
View File
@@ -6,7 +6,6 @@ use std::process::Command;
use std::sync::Mutex;
use super::super::gates::run_project_tests;
use super::conflicts::try_resolve_conflicts;
use super::{MergeReport, SquashMergeResult};
use crate::config::ProjectConfig;
@@ -107,55 +106,28 @@ pub(crate) fn run_squash_merge(
all_output.push_str(&merge_stderr);
all_output.push('\n');
let mut had_conflicts = false;
let mut conflicts_resolved = false;
let conflicts_resolved = false;
let mut conflict_details: Option<String> = None;
if !merge.status.success() {
had_conflicts = true;
all_output.push_str("=== Conflicts detected, attempting auto-resolution ===\n");
// Try to automatically resolve simple conflicts.
match try_resolve_conflicts(&merge_wt_path) {
Ok((resolved, resolution_log)) => {
all_output.push_str(&resolution_log);
if resolved {
conflicts_resolved = true;
all_output.push_str("=== All conflicts resolved automatically ===\n");
} else {
// Could not resolve — abort, clean up, and report.
let details = format!(
"Merge conflicts in branch '{branch}':\n{merge_stdout}{merge_stderr}\n{resolution_log}"
);
conflict_details = Some(details);
all_output.push_str("=== Unresolvable conflicts, aborting merge ===\n");
cleanup_merge_workspace(project_root, &merge_wt_path, &merge_branch);
return Ok(SquashMergeResult {
success: false,
had_conflicts: true,
conflicts_resolved: false,
conflict_details,
output: all_output,
gates_passed: false,
});
}
}
Err(e) => {
all_output.push_str(&format!("Auto-resolution error: {e}\n"));
cleanup_merge_workspace(project_root, &merge_wt_path, &merge_branch);
return Ok(SquashMergeResult {
success: false,
had_conflicts: true,
conflicts_resolved: false,
conflict_details: Some(format!(
"Merge conflicts in branch '{branch}' (auto-resolution failed: {e}):\n{merge_stdout}{merge_stderr}"
)),
output: all_output,
gates_passed: false,
});
}
}
all_output.push_str(
"=== Conflicts detected — aborting merge. Use `start_agent mergemaster` \
to invoke LLM-driven conflict resolution. ===\n",
);
let details =
format!("Merge conflicts in branch '{branch}':\n{merge_stdout}{merge_stderr}");
conflict_details = Some(details);
cleanup_merge_workspace(project_root, &merge_wt_path, &merge_branch);
return Ok(SquashMergeResult {
success: false,
had_conflicts: true,
conflicts_resolved,
conflict_details,
output: all_output,
gates_passed: false,
});
}
let had_conflicts = false;
// ── Commit in the temporary worktree ──────────────────────────
all_output.push_str("=== git commit ===\n");