Update file on incomplete buffer instead of waiting for it to be opened
This ensures that two successive file updates coming from the host are not applied in reverse order.
This commit is contained in:
parent
8020ea783f
commit
ef04dc14cc
1 changed files with 11 additions and 19 deletions
|
@ -5313,28 +5313,20 @@ impl Project {
|
||||||
mut cx: AsyncAppContext,
|
mut cx: AsyncAppContext,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let buffer_id = envelope.payload.buffer_id;
|
let buffer_id = envelope.payload.buffer_id;
|
||||||
let is_incomplete = this.read_with(&cx, |this, _| {
|
|
||||||
this.incomplete_remote_buffers.contains_key(&buffer_id)
|
|
||||||
});
|
|
||||||
|
|
||||||
let buffer = if is_incomplete {
|
|
||||||
Some(
|
|
||||||
this.update(&mut cx, |this, cx| {
|
|
||||||
this.wait_for_remote_buffer(buffer_id, cx)
|
|
||||||
})
|
|
||||||
.await?,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
this.update(&mut cx, |this, cx| {
|
this.update(&mut cx, |this, cx| {
|
||||||
let payload = envelope.payload.clone();
|
let payload = envelope.payload.clone();
|
||||||
if let Some(buffer) = buffer.or_else(|| {
|
if let Some(buffer) = this
|
||||||
this.opened_buffers
|
.opened_buffers
|
||||||
.get(&buffer_id)
|
.get(&buffer_id)
|
||||||
.and_then(|b| b.upgrade(cx))
|
.and_then(|b| b.upgrade(cx))
|
||||||
}) {
|
.or_else(|| {
|
||||||
|
this.incomplete_remote_buffers
|
||||||
|
.get(&buffer_id)
|
||||||
|
.cloned()
|
||||||
|
.flatten()
|
||||||
|
})
|
||||||
|
{
|
||||||
let file = payload.file.ok_or_else(|| anyhow!("invalid file"))?;
|
let file = payload.file.ok_or_else(|| anyhow!("invalid file"))?;
|
||||||
let worktree = this
|
let worktree = this
|
||||||
.worktree_for_id(WorktreeId::from_proto(file.worktree_id), cx)
|
.worktree_for_id(WorktreeId::from_proto(file.worktree_id), cx)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue