mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-11 21:13:02 +00:00
Return error when waiting on a worktree snapshot after disconnecting
This commit is contained in:
parent
cd0b663f62
commit
af2a2d2494
1 changed files with 10 additions and 4 deletions
|
@ -81,6 +81,7 @@ pub struct RemoteWorktree {
|
|||
replica_id: ReplicaId,
|
||||
diagnostic_summaries: TreeMap<PathKey, DiagnosticSummary>,
|
||||
visible: bool,
|
||||
disconnected: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
@ -248,6 +249,7 @@ impl Worktree {
|
|||
client: client.clone(),
|
||||
diagnostic_summaries: Default::default(),
|
||||
visible,
|
||||
disconnected: false,
|
||||
})
|
||||
});
|
||||
|
||||
|
@ -1069,6 +1071,7 @@ impl RemoteWorktree {
|
|||
pub fn disconnected_from_host(&mut self) {
|
||||
self.updates_tx.take();
|
||||
self.snapshot_subscriptions.clear();
|
||||
self.disconnected = true;
|
||||
}
|
||||
|
||||
pub fn update_from_remote(&mut self, update: proto::UpdateWorktree) {
|
||||
|
@ -1083,10 +1086,12 @@ impl RemoteWorktree {
|
|||
self.scan_id > scan_id || (self.scan_id == scan_id && self.is_complete)
|
||||
}
|
||||
|
||||
fn wait_for_snapshot(&mut self, scan_id: usize) -> impl Future<Output = ()> {
|
||||
fn wait_for_snapshot(&mut self, scan_id: usize) -> impl Future<Output = Result<()>> {
|
||||
let (tx, rx) = oneshot::channel();
|
||||
if self.observed_snapshot(scan_id) {
|
||||
let _ = tx.send(());
|
||||
} else if self.disconnected {
|
||||
drop(tx);
|
||||
} else {
|
||||
match self
|
||||
.snapshot_subscriptions
|
||||
|
@ -1097,7 +1102,8 @@ impl RemoteWorktree {
|
|||
}
|
||||
|
||||
async move {
|
||||
let _ = rx.await;
|
||||
rx.await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1126,7 +1132,7 @@ impl RemoteWorktree {
|
|||
) -> Task<Result<Entry>> {
|
||||
let wait_for_snapshot = self.wait_for_snapshot(scan_id);
|
||||
cx.spawn(|this, mut cx| async move {
|
||||
wait_for_snapshot.await;
|
||||
wait_for_snapshot.await?;
|
||||
this.update(&mut cx, |worktree, _| {
|
||||
let worktree = worktree.as_remote_mut().unwrap();
|
||||
let mut snapshot = worktree.background_snapshot.lock();
|
||||
|
@ -1145,7 +1151,7 @@ impl RemoteWorktree {
|
|||
) -> Task<Result<()>> {
|
||||
let wait_for_snapshot = self.wait_for_snapshot(scan_id);
|
||||
cx.spawn(|this, mut cx| async move {
|
||||
wait_for_snapshot.await;
|
||||
wait_for_snapshot.await?;
|
||||
this.update(&mut cx, |worktree, _| {
|
||||
let worktree = worktree.as_remote_mut().unwrap();
|
||||
let mut snapshot = worktree.background_snapshot.lock();
|
||||
|
|
Loading…
Reference in a new issue