import re with open("server/src/main.rs", "r", encoding="utf-8") as f: content = f.read() git_worker_old = """async fn git_sync_worker(state: Arc) { let repo_path = std::env::current_dir().unwrap_or_else(|_| ".".into()); let mut last_commit_id = String::new(); loop { tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; if let Ok(repo) = git2::Repository::discover(&repo_path) { if let Ok(head) = repo.head() { if let Ok(commit) = head.peel_to_commit() { let current_id = commit.id().to_string(); if current_id != last_commit_id && !last_commit_id.is_empty() { let msg = commit.message().unwrap_or("").to_string(); let branch = head.shorthand().unwrap_or("unknown").to_string(); state.ledger.modify(|changes| { changes.push(crate::models::CodeChange { git_commit: Some(current_id.clone()), git_branch: Some(branch), description: format!("Auto-synced commit: {}", msg.trim()), timestamp: std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_secs(), file_path: "".to_string(), }); }); eprintln!("Git Sync: Logged new commit {}", current_id); state.tasks.modify(|tasks| { for task in tasks.iter_mut() { if task.status != "completed" && msg.to_lowercase().contains(&task.title.to_lowercase()) { task.status = "completed".to_string(); eprintln!("Git Sync: Auto-completed task '{}'", task.title); } } }); } last_commit_id = current_id; } } } } }""" git_worker_new = """async fn git_sync_worker(state: Arc) { let repo_path = std::env::current_dir().unwrap_or_else(|_| ".".into()); let mut last_commit_id = String::new(); loop { tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; let repo_path_clone = repo_path.clone(); let commit_data = tokio::task::spawn_blocking(move || { if let Ok(repo) = git2::Repository::discover(&repo_path_clone) { if let Ok(head) = repo.head() { if let Ok(commit) = head.peel_to_commit() { let current_id = commit.id().to_string(); let msg = commit.message().unwrap_or("").to_string(); let branch = head.shorthand().unwrap_or("unknown").to_string(); return Some((current_id, msg, branch)); } } } None }) .await .unwrap_or(None); if let Some((current_id, msg, branch)) = commit_data { if current_id != last_commit_id && !last_commit_id.is_empty() { state.ledger.modify(|changes| { changes.push(crate::models::CodeChange { git_commit: Some(current_id.clone()), git_branch: Some(branch), description: format!("Auto-synced commit: {}", msg.trim()), timestamp: std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_secs(), file_path: "".to_string(), }); }); eprintln!("Git Sync: Logged new commit {}", current_id); state.tasks.modify(|tasks| { for task in tasks.iter_mut() { if task.status != "completed" && msg.to_lowercase().contains(&task.title.to_lowercase()) { task.status = "completed".to_string(); eprintln!("Git Sync: Auto-completed task '{}'", task.title); } } }); } last_commit_id = current_id; } } }""" content = content.replace(git_worker_old, git_worker_new) with open("server/src/main.rs", "w", encoding="utf-8") as f: f.write(content)