Skip to content

Commit f45a9b3

Browse files
git: Branch diff (#40188)
Release Notes: - git: Adds the ability to view the diff of the current branch since main --------- Co-authored-by: Cole Miller <[email protected]>
1 parent f11a3dc commit f45a9b3

File tree

18 files changed

+1362
-777
lines changed

18 files changed

+1362
-777
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/buffer_diff/src/buffer_diff.rs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,34 +1162,22 @@ impl BufferDiff {
11621162
self.hunks_intersecting_range(start..end, buffer, cx)
11631163
}
11641164

1165-
pub fn set_base_text_buffer(
1166-
&mut self,
1167-
base_buffer: Entity<language::Buffer>,
1168-
buffer: text::BufferSnapshot,
1169-
cx: &mut Context<Self>,
1170-
) -> oneshot::Receiver<()> {
1171-
let base_buffer = base_buffer.read(cx);
1172-
let language_registry = base_buffer.language_registry();
1173-
let base_buffer = base_buffer.snapshot();
1174-
self.set_base_text(base_buffer, language_registry, buffer, cx)
1175-
}
1176-
11771165
/// Used in cases where the change set isn't derived from git.
11781166
pub fn set_base_text(
11791167
&mut self,
1180-
base_buffer: language::BufferSnapshot,
1168+
base_text: Option<Arc<String>>,
1169+
language: Option<Arc<Language>>,
11811170
language_registry: Option<Arc<LanguageRegistry>>,
11821171
buffer: text::BufferSnapshot,
11831172
cx: &mut Context<Self>,
11841173
) -> oneshot::Receiver<()> {
11851174
let (tx, rx) = oneshot::channel();
11861175
let this = cx.weak_entity();
1187-
let base_text = Arc::new(base_buffer.text());
11881176

11891177
let snapshot = BufferDiffSnapshot::new_with_base_text(
11901178
buffer.clone(),
1191-
Some(base_text),
1192-
base_buffer.language().cloned(),
1179+
base_text,
1180+
language,
11931181
language_registry,
11941182
cx,
11951183
);

crates/collab/src/rpc.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ impl Server {
347347
.add_request_handler(forward_read_only_project_request::<proto::GetColorPresentation>)
348348
.add_request_handler(forward_read_only_project_request::<proto::OpenBufferByPath>)
349349
.add_request_handler(forward_read_only_project_request::<proto::GitGetBranches>)
350+
.add_request_handler(forward_read_only_project_request::<proto::GetDefaultBranch>)
350351
.add_request_handler(forward_read_only_project_request::<proto::OpenUnstagedDiff>)
351352
.add_request_handler(forward_read_only_project_request::<proto::OpenUncommittedDiff>)
352353
.add_request_handler(forward_read_only_project_request::<proto::LspExtExpandMacro>)
@@ -461,6 +462,8 @@ impl Server {
461462
.add_message_handler(broadcast_project_message_from_host::<proto::BreakpointsForFile>)
462463
.add_request_handler(forward_mutating_project_request::<proto::OpenCommitMessageBuffer>)
463464
.add_request_handler(forward_mutating_project_request::<proto::GitDiff>)
465+
.add_request_handler(forward_mutating_project_request::<proto::GetTreeDiff>)
466+
.add_request_handler(forward_mutating_project_request::<proto::GetBlobContent>)
464467
.add_request_handler(forward_mutating_project_request::<proto::GitCreateBranch>)
465468
.add_request_handler(forward_mutating_project_request::<proto::GitChangeBranch>)
466469
.add_request_handler(forward_mutating_project_request::<proto::CheckForPushedCommits>)

crates/editor/src/editor.rs

Lines changed: 19 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ mod lsp_ext;
3232
mod mouse_context_menu;
3333
pub mod movement;
3434
mod persistence;
35-
mod proposed_changes_editor;
3635
mod rust_analyzer_ext;
3736
pub mod scroll;
3837
mod selections_collection;
@@ -68,14 +67,12 @@ pub use multi_buffer::{
6867
Anchor, AnchorRangeExt, ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot, PathKey,
6968
RowInfo, ToOffset, ToPoint,
7069
};
71-
pub use proposed_changes_editor::{
72-
ProposedChangeLocation, ProposedChangesEditor, ProposedChangesEditorToolbar,
73-
};
7470
pub use text::Bias;
7571

7672
use ::git::{
7773
Restore,
7874
blame::{BlameEntry, ParsedCommitMessage},
75+
status::FileStatus,
7976
};
8077
use aho_corasick::AhoCorasick;
8178
use anyhow::{Context as _, Result, anyhow};
@@ -847,6 +844,10 @@ pub trait Addon: 'static {
847844
None
848845
}
849846

847+
fn override_status_for_buffer_id(&self, _: BufferId, _: &App) -> Option<FileStatus> {
848+
None
849+
}
850+
850851
fn to_any(&self) -> &dyn std::any::Any;
851852

852853
fn to_any_mut(&mut self) -> Option<&mut dyn std::any::Any> {
@@ -10641,6 +10642,20 @@ impl Editor {
1064110642
}
1064210643
}
1064310644

10645+
pub fn status_for_buffer_id(&self, buffer_id: BufferId, cx: &App) -> Option<FileStatus> {
10646+
if let Some(status) = self
10647+
.addons
10648+
.iter()
10649+
.find_map(|(_, addon)| addon.override_status_for_buffer_id(buffer_id, cx))
10650+
{
10651+
return Some(status);
10652+
}
10653+
self.project
10654+
.as_ref()?
10655+
.read(cx)
10656+
.status_for_buffer_id(buffer_id, cx)
10657+
}
10658+
1064410659
pub fn open_active_item_in_terminal(
1064510660
&mut self,
1064610661
_: &OpenInTerminal,
@@ -21011,65 +21026,6 @@ impl Editor {
2101121026
self.searchable
2101221027
}
2101321028

21014-
fn open_proposed_changes_editor(
21015-
&mut self,
21016-
_: &OpenProposedChangesEditor,
21017-
window: &mut Window,
21018-
cx: &mut Context<Self>,
21019-
) {
21020-
let Some(workspace) = self.workspace() else {
21021-
cx.propagate();
21022-
return;
21023-
};
21024-
21025-
let selections = self.selections.all::<usize>(&self.display_snapshot(cx));
21026-
let multi_buffer = self.buffer.read(cx);
21027-
let multi_buffer_snapshot = multi_buffer.snapshot(cx);
21028-
let mut new_selections_by_buffer = HashMap::default();
21029-
for selection in selections {
21030-
for (buffer, range, _) in
21031-
multi_buffer_snapshot.range_to_buffer_ranges(selection.start..selection.end)
21032-
{
21033-
let mut range = range.to_point(buffer);
21034-
range.start.column = 0;
21035-
range.end.column = buffer.line_len(range.end.row);
21036-
new_selections_by_buffer
21037-
.entry(multi_buffer.buffer(buffer.remote_id()).unwrap())
21038-
.or_insert(Vec::new())
21039-
.push(range)
21040-
}
21041-
}
21042-
21043-
let proposed_changes_buffers = new_selections_by_buffer
21044-
.into_iter()
21045-
.map(|(buffer, ranges)| ProposedChangeLocation { buffer, ranges })
21046-
.collect::<Vec<_>>();
21047-
let proposed_changes_editor = cx.new(|cx| {
21048-
ProposedChangesEditor::new(
21049-
"Proposed changes",
21050-
proposed_changes_buffers,
21051-
self.project.clone(),
21052-
window,
21053-
cx,
21054-
)
21055-
});
21056-
21057-
window.defer(cx, move |window, cx| {
21058-
workspace.update(cx, |workspace, cx| {
21059-
workspace.active_pane().update(cx, |pane, cx| {
21060-
pane.add_item(
21061-
Box::new(proposed_changes_editor),
21062-
true,
21063-
true,
21064-
None,
21065-
window,
21066-
cx,
21067-
);
21068-
});
21069-
});
21070-
});
21071-
}
21072-
2107321029
pub fn open_excerpts_in_split(
2107421030
&mut self,
2107521031
_: &OpenExcerptsSplit,

crates/editor/src/element.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,6 @@ impl EditorElement {
458458
register_action(editor, window, Editor::toggle_code_actions);
459459
register_action(editor, window, Editor::open_excerpts);
460460
register_action(editor, window, Editor::open_excerpts_in_split);
461-
register_action(editor, window, Editor::open_proposed_changes_editor);
462461
register_action(editor, window, Editor::toggle_soft_wrap);
463462
register_action(editor, window, Editor::toggle_tab_bar);
464463
register_action(editor, window, Editor::toggle_line_numbers);
@@ -3828,13 +3827,7 @@ impl EditorElement {
38283827
let multi_buffer = editor.buffer.read(cx);
38293828
let file_status = multi_buffer
38303829
.all_diff_hunks_expanded()
3831-
.then(|| {
3832-
editor
3833-
.project
3834-
.as_ref()?
3835-
.read(cx)
3836-
.status_for_buffer_id(for_excerpt.buffer_id, cx)
3837-
})
3830+
.then(|| editor.status_for_buffer_id(for_excerpt.buffer_id, cx))
38383831
.flatten();
38393832
let indicator = multi_buffer
38403833
.buffer(for_excerpt.buffer_id)

0 commit comments

Comments
 (0)