huskies: merge 1244 refactor Deduplicate the worktree module cluster (cleanup/remove/sweep/create/lifecycle share ~60-line clones)

This commit is contained in:
Huskies Agent
2026-07-21 20:19:29 +00:00
parent c58e204e8b
commit c3cad6b3d8
8 changed files with 95 additions and 324 deletions
+1 -71
View File
@@ -169,81 +169,11 @@ pub fn format_report(report: &CleanupReport, confirm: bool) -> String {
#[cfg(test)]
mod tests {
use super::*;
use crate::config::WatcherConfig;
use chrono::Utc;
use crate::worktree::test_support::{done_stage, empty_config, init_git_repo};
use std::fs;
use std::path::PathBuf;
use std::process::Command;
use tempfile::TempDir;
fn init_git_repo(dir: &std::path::Path) {
use crate::git_test_support::git_ok;
git_ok(
Command::new("git").args(["init"]).current_dir(dir).output(),
"git init",
);
git_ok(
Command::new("git")
.args(["config", "user.email", "test@test.com"])
.current_dir(dir)
.output(),
"git config user.email",
);
git_ok(
Command::new("git")
.args(["config", "user.name", "Test"])
.current_dir(dir)
.output(),
"git config user.name",
);
git_ok(
Command::new("git")
.args(["commit", "--allow-empty", "-m", "init"])
.current_dir(dir)
.output(),
"git commit",
);
}
fn empty_config() -> ProjectConfig {
ProjectConfig {
component: vec![],
agent: vec![],
watcher: WatcherConfig::default(),
disk_watch: Default::default(),
default_qa: "server".to_string(),
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
rate_limit_notifications: true,
web_ui_status_consumer: true,
matrix_status_consumer: true,
slack_status_consumer: true,
discord_status_consumer: true,
whatsapp_status_consumer: true,
timezone: None,
rendezvous: None,
trusted_keys: Vec::new(),
crdt_require_token: false,
crdt_tokens: Vec::new(),
max_mesh_peers: 3,
gateway_url: None,
gateway_project: None,
status_push_enabled: true,
merge_failure_block_threshold: 3,
gc_min_free_gb: 0,
snapshot_interval_ops: 5000,
}
}
fn done_stage() -> Stage {
Stage::Done {
merged_at: Utc::now(),
merge_commit: crate::pipeline_state::GitSha("abc123".to_string()),
}
}
async fn setup_project_with_real_worktree(story_id: &str) -> (TempDir, PathBuf) {
let tmp = TempDir::new().unwrap();
let project_root = tmp.path().join("project");