Restore file to original content when rejecting file recreated by agent (#29264)

Release Notes:

- Fixed a bug that could sometimes cause a file to be deleted when
rejecting an agent change.
This commit is contained in:
Antonio Scandurra 2025-04-23 11:42:43 +02:00 committed by GitHub
parent 5e31d86f1f
commit 55ea481707
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 77 additions and 63 deletions

View file

@ -159,7 +159,7 @@ impl Tool for CodeActionTool {
};
action_log.update(cx, |action_log, cx| {
action_log.buffer_read(buffer.clone(), cx);
action_log.track_buffer(buffer.clone(), cx);
})?;
let range = {

View file

@ -174,7 +174,7 @@ pub async fn file_outline(
};
action_log.update(cx, |action_log, cx| {
action_log.buffer_read(buffer.clone(), cx);
action_log.track_buffer(buffer.clone(), cx);
})?;
// Wait until the buffer has been fully parsed, so that we can read its outline.

View file

@ -209,7 +209,7 @@ impl Tool for ContentsTool {
})?;
action_log.update(cx, |log, cx| {
log.buffer_read(buffer, cx);
log.track_buffer(buffer, cx);
})?;
Ok(result)
@ -221,7 +221,7 @@ impl Tool for ContentsTool {
let result = buffer.read_with(cx, |buffer, _cx| buffer.text())?;
action_log.update(cx, |log, cx| {
log.buffer_read(buffer, cx);
log.track_buffer(buffer, cx);
})?;
Ok(result)

View file

@ -112,9 +112,12 @@ impl Tool for CreateFileTool {
.await
.map_err(|err| anyhow!("Unable to open buffer for {destination_path}: {err}"))?;
cx.update(|cx| {
action_log.update(cx, |action_log, cx| {
action_log.track_buffer(buffer.clone(), cx)
});
buffer.update(cx, |buffer, cx| buffer.set_text(contents, cx));
action_log.update(cx, |action_log, cx| {
action_log.will_create_buffer(buffer.clone(), cx)
action_log.buffer_edited(buffer.clone(), cx)
});
})?;

View file

@ -182,7 +182,7 @@ impl Tool for EditFileTool {
let snapshot = cx.update(|cx| {
action_log.update(cx, |log, cx| {
log.buffer_read(buffer.clone(), cx)
log.track_buffer(buffer.clone(), cx)
});
let snapshot = buffer.update(cx, |buffer, cx| {
buffer.finalize_last_transaction();

View file

@ -134,7 +134,7 @@ impl Tool for ReadFileTool {
})?;
action_log.update(cx, |log, cx| {
log.buffer_read(buffer, cx);
log.track_buffer(buffer, cx);
})?;
Ok(result)
@ -147,7 +147,7 @@ impl Tool for ReadFileTool {
let result = buffer.read_with(cx, |buffer, _cx| buffer.text())?;
action_log.update(cx, |log, cx| {
log.buffer_read(buffer, cx);
log.track_buffer(buffer, cx);
})?;
Ok(result)

View file

@ -106,7 +106,7 @@ impl Tool for RenameTool {
};
action_log.update(cx, |action_log, cx| {
action_log.buffer_read(buffer.clone(), cx);
action_log.track_buffer(buffer.clone(), cx);
})?;
let position = {

View file

@ -140,7 +140,7 @@ impl Tool for SymbolInfoTool {
};
action_log.update(cx, |action_log, cx| {
action_log.buffer_read(buffer.clone(), cx);
action_log.track_buffer(buffer.clone(), cx);
})?;
let position = {