Fix diff indicators not restored when reopening remote project (#31384)
Closes #30917 Release Notes: - Fix diff indicators not restored when reopening remote project --------- Co-authored-by: Cole Miller <cole@zed.dev>
This commit is contained in:
parent
b686fb2917
commit
c766f52f88
6 changed files with 192 additions and 7 deletions
|
@ -75,6 +75,8 @@ assistant_tools.workspace = true
|
|||
client = { workspace = true, features = ["test-support"] }
|
||||
clock = { workspace = true, features = ["test-support"] }
|
||||
dap = { workspace = true, features = ["test-support"] }
|
||||
editor = { workspace = true, features = ["test-support"] }
|
||||
workspace = { workspace = true, features = ["test-support"] }
|
||||
fs = { workspace = true, features = ["test-support"] }
|
||||
gpui = { workspace = true, features = ["test-support"] }
|
||||
http_client = { workspace = true, features = ["test-support"] }
|
||||
|
|
|
@ -1434,6 +1434,148 @@ async fn test_remote_git_diffs(cx: &mut TestAppContext, server_cx: &mut TestAppC
|
|||
});
|
||||
}
|
||||
|
||||
// TODO: this test fails on Windows.
|
||||
#[cfg(not(windows))]
|
||||
#[gpui::test]
|
||||
async fn test_remote_git_diffs_when_recv_update_repository_delay(
|
||||
cx: &mut TestAppContext,
|
||||
server_cx: &mut TestAppContext,
|
||||
) {
|
||||
use editor::Editor;
|
||||
use gpui::VisualContext;
|
||||
let text_2 = "
|
||||
fn one() -> usize {
|
||||
1
|
||||
}
|
||||
"
|
||||
.unindent();
|
||||
let text_1 = "
|
||||
fn one() -> usize {
|
||||
0
|
||||
}
|
||||
"
|
||||
.unindent();
|
||||
|
||||
let fs = FakeFs::new(server_cx.executor());
|
||||
fs.insert_tree(
|
||||
"/code",
|
||||
json!({
|
||||
"project1": {
|
||||
"src": {
|
||||
"lib.rs": text_2
|
||||
},
|
||||
"README.md": "# project 1",
|
||||
},
|
||||
}),
|
||||
)
|
||||
.await;
|
||||
|
||||
let (project, _headless) = init_test(&fs, cx, server_cx).await;
|
||||
let (worktree, _) = project
|
||||
.update(cx, |project, cx| {
|
||||
project.find_or_create_worktree("/code/project1", true, cx)
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
let worktree_id = cx.update(|cx| worktree.read(cx).id());
|
||||
let buffer = project
|
||||
.update(cx, |project, cx| {
|
||||
project.open_buffer((worktree_id, Path::new("src/lib.rs")), cx)
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
let buffer_id = cx.update(|cx| buffer.read(cx).remote_id());
|
||||
cx.update(|cx| {
|
||||
workspace::init_settings(cx);
|
||||
editor::init_settings(cx);
|
||||
});
|
||||
let cx = cx.add_empty_window();
|
||||
let editor = cx.new_window_entity(|window, cx| {
|
||||
Editor::for_buffer(buffer, Some(project.clone()), window, cx)
|
||||
});
|
||||
|
||||
// Remote server will send proto::UpdateRepository after the instance of Editor create.
|
||||
fs.insert_tree(
|
||||
"/code",
|
||||
json!({
|
||||
"project1": {
|
||||
".git": {},
|
||||
},
|
||||
}),
|
||||
)
|
||||
.await;
|
||||
|
||||
fs.set_index_for_repo(
|
||||
Path::new("/code/project1/.git"),
|
||||
&[("src/lib.rs".into(), text_1.clone())],
|
||||
);
|
||||
fs.set_head_for_repo(
|
||||
Path::new("/code/project1/.git"),
|
||||
&[("src/lib.rs".into(), text_1.clone())],
|
||||
"sha",
|
||||
);
|
||||
|
||||
cx.executor().run_until_parked();
|
||||
let diff = editor
|
||||
.read_with(cx, |editor, cx| {
|
||||
editor
|
||||
.buffer()
|
||||
.read_with(cx, |buffer, _| buffer.diff_for(buffer_id))
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
diff.read_with(cx, |diff, cx| {
|
||||
assert_eq!(diff.base_text_string().unwrap(), text_1);
|
||||
assert_eq!(
|
||||
diff.secondary_diff()
|
||||
.unwrap()
|
||||
.read(cx)
|
||||
.base_text_string()
|
||||
.unwrap(),
|
||||
text_1
|
||||
);
|
||||
});
|
||||
|
||||
// stage the current buffer's contents
|
||||
fs.set_index_for_repo(
|
||||
Path::new("/code/project1/.git"),
|
||||
&[("src/lib.rs".into(), text_2.clone())],
|
||||
);
|
||||
|
||||
cx.executor().run_until_parked();
|
||||
diff.read_with(cx, |diff, cx| {
|
||||
assert_eq!(diff.base_text_string().unwrap(), text_1);
|
||||
assert_eq!(
|
||||
diff.secondary_diff()
|
||||
.unwrap()
|
||||
.read(cx)
|
||||
.base_text_string()
|
||||
.unwrap(),
|
||||
text_2
|
||||
);
|
||||
});
|
||||
|
||||
// commit the current buffer's contents
|
||||
fs.set_head_for_repo(
|
||||
Path::new("/code/project1/.git"),
|
||||
&[("src/lib.rs".into(), text_2.clone())],
|
||||
"sha",
|
||||
);
|
||||
|
||||
cx.executor().run_until_parked();
|
||||
diff.read_with(cx, |diff, cx| {
|
||||
assert_eq!(diff.base_text_string().unwrap(), text_2);
|
||||
assert_eq!(
|
||||
diff.secondary_diff()
|
||||
.unwrap()
|
||||
.read(cx)
|
||||
.base_text_string()
|
||||
.unwrap(),
|
||||
text_2
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_remote_git_branches(cx: &mut TestAppContext, server_cx: &mut TestAppContext) {
|
||||
let fs = FakeFs::new(server_cx.executor());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue