Skip to content

Commit e8a0723

Browse files
committed
fix(git): emit changes:update immediately after commit to refresh diff state
1 parent 285d225 commit e8a0723

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

anycode-backend/src/handlers/git_handler.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::app_state::{AppState, send_response};
22
use serde::{Deserialize, Serialize};
33
use serde_json::json;
4-
use socketioxide::extract::{AckSender, Data, State};
4+
use socketioxide::extract::{AckSender, Data, SocketRef, State};
55
use tracing::info;
66

77
#[derive(Debug, Serialize, Deserialize, Clone)]
@@ -53,17 +53,30 @@ pub async fn handle_git_file_original(
5353
}
5454

5555
pub async fn handle_git_commit(
56+
socket: SocketRef,
5657
Data(request): Data<GitCommitRequest>,
5758
ack: AckSender,
5859
state: State<AppState>,
5960
) {
6061
info!("Received git:commit: {} files", request.files.len());
61-
let result = {
62-
let git = state.git_manager.lock().await;
63-
git.commit(&request.files, &request.message)
64-
.map(|_| json!({}))
62+
63+
let (result, changes_update) = {
64+
let mut git = state.git_manager.lock().await;
65+
match git.commit(&request.files, &request.message) {
66+
Ok(_) => {
67+
let status = git.refresh_status_cache().map(|s| s.to_json());
68+
(Ok(json!({})), status.ok())
69+
}
70+
Err(e) => (Err(e), None),
71+
}
6572
};
73+
6674
send_response(ack, result);
75+
76+
if let Some(update) = changes_update {
77+
let _ = socket.emit("changes:update", &update);
78+
let _ = socket.broadcast().emit("changes:update", &update).await;
79+
}
6780
}
6881

6982
pub async fn handle_git_push(ack: AckSender, state: State<AppState>) {

0 commit comments

Comments
 (0)