diff --git a/crates/action_log/src/action_log.rs b/crates/action_log/src/action_log.rs index 404fb3616dd4139d878e17bd9bbf847471902098..fd16d8a61433869f4b0a20892d94b159164cf3bb 100644 --- a/crates/action_log/src/action_log.rs +++ b/crates/action_log/src/action_log.rs @@ -131,7 +131,16 @@ impl ActionLog { cx: &mut Context, ) { match event { - BufferEvent::Edited => self.handle_buffer_edited(buffer, cx), + BufferEvent::Edited => { + let Some(tracked_buffer) = self.tracked_buffers.get_mut(&buffer) else { + return; + }; + let buffer_version = buffer.read(cx).version(); + if !buffer_version.changed_since(&tracked_buffer.version) { + return; + } + self.handle_buffer_edited(buffer, cx); + } BufferEvent::FileHandleChanged => { self.handle_buffer_file_changed(buffer, cx); } @@ -464,10 +473,13 @@ impl ActionLog { /// Mark a buffer as edited by agent, so we can refresh it in the context pub fn buffer_edited(&mut self, buffer: Entity, cx: &mut Context) { + let new_version = buffer.read(cx).version(); let tracked_buffer = self.track_buffer_internal(buffer, false, cx); if let TrackedBufferStatus::Deleted = tracked_buffer.status { tracked_buffer.status = TrackedBufferStatus::Modified; } + + tracked_buffer.version = new_version; tracked_buffer.schedule_diff_update(ChangeAuthor::Agent, cx); } @@ -954,6 +966,7 @@ enum ChangeAuthor { Agent, } +#[derive(Debug)] enum TrackedBufferStatus { Created { existing_file_content: Option }, Modified,