Commit Graph

1088 Commits

Author SHA1 Message Date
Max Brunsfeld
58eefcd331 Add ModelHandle::spawn_weak, fix worktree leak from spawn call 2021-07-05 17:55:52 -07:00
Max Brunsfeld
65e4e78cd7 Add unit test for worktree update messages, fix minor issues
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-07-05 17:55:48 -07:00
Nathan Sobo
73db910a95 Process remote worktree updates in the background
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-07-05 14:20:53 -06:00
Nathan Sobo
036dcd50fd Start on applying remote worktree updates in the background
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-07-05 13:44:42 -06:00
Antonio Scandurra
53adaa77c1 Propagate file system changes to remote worktrees 2021-07-05 17:54:48 +02:00
Antonio Scandurra
2a779d3529 Rename {Add,Remove}Guest to {Add,Remove}Peer 2021-07-05 10:24:39 +02:00
Antonio Scandurra
61222b4fe5 Expose Client::disconnect to force disconnection 2021-07-05 10:18:12 +02:00
Max Brunsfeld
899b9cd5ad Avoid deadlocks on rpc state by switching to an RwLock 2021-07-02 15:55:16 -07:00
Max Brunsfeld
08991db882 Implement Copy for peer::Receipt 2021-07-02 15:54:42 -07:00
Max Brunsfeld
a7f812e059 Avoid circular model update in save_buffer handler 2021-07-02 15:53:45 -07:00
Max Brunsfeld
86b9ab4505 Construct remote worktree snapshots in the background 2021-07-02 15:22:58 -07:00
Antonio Scandurra
569a4a1e2d WIP: Save remote buffers 2021-07-02 17:02:17 +02:00
Antonio Scandurra
b8bddd6c05 Fix tests 2021-07-02 15:18:08 +02:00
Antonio Scandurra
7ae1d9e997 Send also the currently active selection sets when serializing a buffer 2021-07-02 11:29:36 +02:00
Max Brunsfeld
9d51fe88e9 Serialize RPC sends and responses using a channel 2021-07-01 22:02:27 -07:00
Max Brunsfeld
42f7867f6e Avoid spurious error logging when host edits buffers not open by guests
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-07-01 11:23:51 -07:00
Antonio Scandurra
e95936c624 Fix memory leak of Editor due to blinking cursors
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-07-01 15:57:17 +02:00
Antonio Scandurra
da7bd8439b Report SelectionSet deletion operations correctly 2021-07-01 12:54:16 +02:00
Antonio Scandurra
c881c7f30f Start on rendering remote selections 2021-07-01 11:21:43 +02:00
Antonio Scandurra
e07065265d Expose Worktree::{peers,replica_id} 2021-07-01 09:36:09 +02:00
Antonio Scandurra
ed9036f3fc Send a CloseWorktree message when a shared Worktree is dropped 2021-06-30 17:00:29 +02:00
Antonio Scandurra
1d53d43d6f Store online peers when joining a worktree 2021-06-30 15:07:33 +02:00
Antonio Scandurra
7704291432 Maintain a set of peers as they join and leave the worktree 2021-06-30 13:22:22 +02:00
Antonio Scandurra
ab089b6575 Avoid logging errors in RPC message handlers
The `on_message` helper already logs when an error occurs.
2021-06-30 12:05:58 +02:00
Antonio Scandurra
8e5e354bd8 💄 2021-06-30 12:00:13 +02:00
Antonio Scandurra
3c8aa0ee70 Move remote::update_buffer main logic into Worktree::update_buffer 2021-06-30 11:57:05 +02:00
Nathan Sobo
0fde7a55ef Store shared buffers on LocalWorktree
It's okay for our domain objects to model remote state. We should minimize what we need to store in the rpc::ClientState struct.
2021-06-29 21:01:43 -06:00
Nathan Sobo
bbf803d7dc Store a reference to the LangageRegistry on the Worktree 2021-06-29 20:07:37 -06:00
Nathan Sobo
34963ac80d Use entry_id on File instead of worktree::Diff to detect when buffers' files change
Rather than computing a diff after processing a batch of FSEvents, we instead detect renames as we're inserting entries. We store an entry_id on the File object that is owned by each buffer, and use this to detect when the path of the File has changed.

We now also manage all File-related state and event emission for Buffers in the LocalWorktree, since the logic will need to be totally different in the remote case.

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-06-29 18:19:38 -06:00
Antonio Scandurra
e80439daaa Merge branch 'main' into rpc 2021-06-29 10:25:42 +02:00
Nathan Sobo
b7a4393f29 Redesign Worktree save API and make test_rescan_simple pass
This commit does too much. The first goal was to change our approach to saving new buffers so that we don't need to construct a File for an entry that doesn't exist. Rather than doing that, we call `Worktree::save_buffer_as` with the buffer handle, the path, and the contents. This then saves the buffer and returns a handle to a `File` that references an entry that actually exists. I needed to do this so that we can store an entry id on `File`.

In the process, I noticed intermittent test failures on `test_rescan_simple`, so I made some changes required to fix those related to our reuse of existing ids. Our previous approach of removing a path when inserting a new entry was broken, because of the recursive nature of `remove_path`. Instead, I simply recycle the id of an existing worktree entry with the same path if one is present, then allow it to be replaced.
2021-06-28 19:05:38 -06:00
Nathan Sobo
1793eda470 Eagerly populate worktree entries on load
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-06-28 12:29:46 -06:00
Antonio Scandurra
958345b5ce Assign a stable identity to Worktree entries
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-06-28 19:41:33 +02:00
Antonio Scandurra
65aa9733d7 Restructure RPC state to also keep track of remote worktrees on guests 2021-06-28 15:35:36 +02:00
Antonio Scandurra
e72b4ae03d Maintain active selections as editors are focused and blurred 2021-06-28 12:37:58 +02:00
Antonio Scandurra
0bc8663d36 Remove selection set when an editor is closed 2021-06-28 11:43:21 +02:00
Max Brunsfeld
e2b9ab500f Avoid double handle-read in File::buffer_updated 2021-06-25 17:21:42 -07:00
Max Brunsfeld
60ee97be24 Always represent anchor as a versioned offset
Remove the `Start` and `End` variants, and always
use the structure that was previously called `Middle`.
This makes Anchors simpler to serialize and deserialize.
2021-06-25 17:02:48 -07:00
Max Brunsfeld
b9952bad8b Send and receive buffer operations
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-06-25 16:26:35 -07:00
Max Brunsfeld
04c80578bc Start work on sending buffer operations 2021-06-25 13:46:36 -07:00
Nathan Sobo
7ee0862b99 Notify host when guests close buffers
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-06-25 11:33:40 -07:00
Nathan Sobo
2257abd7dd Add Entity release hooks
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-06-25 10:35:06 -06:00
Antonio Scandurra
d59267a7ef Move remote module from workspace to worktree 2021-06-25 12:14:04 +02:00
Nathan Sobo
3ba22230dc
Merge pull request #97 from zed-industries/limit-bundle-uploads
Only upload artifacts to workflow runs on the main branch
2021-06-24 19:07:04 -06:00
Nathan Sobo
0faabc2177 Only upload artifacts to workflow runs on the main branch
We're running out of actions storage, and we don't really need an artifact stored for every single build.
2021-06-24 19:02:57 -06:00
Nathan Sobo
c4729de913
Merge pull request #96 from zed-industries/retry-flaky-tests
Add a "retries" option to gpui::test macro and use it in flaky tests
2021-06-24 18:08:06 -06:00
Nathan Sobo
8f7111b0f7 Upgrade bindgen to fix warnings on new Rust 2021-06-24 18:02:53 -06:00
Nathan Sobo
3d67266d0b Add a "retries" option to gpui::test macro and use it in flaky tests 2021-06-24 17:51:16 -06:00
Antonio Scandurra
779dbf86dd Allow cleaning up connections/handlers state using Peer::reset 2021-06-24 15:58:43 +02:00
Max Brunsfeld
ce2f3f664a Consolidate more logic for joining worktree in Worktree::remote
This way we can use this method in tests and avoid
needing to construct a Workspace.
2021-06-23 18:07:09 -07:00