103 lines
4.5 KiB
Python
103 lines
4.5 KiB
Python
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<MemoryState>) {
|
|
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<MemoryState>) {
|
|
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)
|