Disable restore hunk control for created files (#25841)

Release Notes:

- Git Beta: disable hunk restore action and button for created files
This commit is contained in:
Cole Miller 2025-03-06 18:06:03 -05:00 committed by GitHub
parent efaf358876
commit a88af7351a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 17 additions and 1 deletions

View file

@ -261,6 +261,7 @@ enum DisplayDiffHunk {
display_row: DisplayRow, display_row: DisplayRow,
}, },
Unfolded { Unfolded {
is_created_file: bool,
diff_base_byte_range: Range<usize>, diff_base_byte_range: Range<usize>,
display_row_range: Range<DisplayRow>, display_row_range: Range<DisplayRow>,
multi_buffer_range: Range<Anchor>, multi_buffer_range: Range<Anchor>,
@ -7895,6 +7896,9 @@ impl Editor {
hunk: &MultiBufferDiffHunk, hunk: &MultiBufferDiffHunk,
cx: &mut App, cx: &mut App,
) -> Option<()> { ) -> Option<()> {
if hunk.is_created_file() {
return None;
}
let buffer = self.buffer.read(cx); let buffer = self.buffer.read(cx);
let diff = buffer.diff_for(hunk.buffer_id)?; let diff = buffer.diff_for(hunk.buffer_id)?;
let buffer = buffer.buffer(hunk.buffer_id)?; let buffer = buffer.buffer(hunk.buffer_id)?;
@ -17282,6 +17286,7 @@ impl EditorSnapshot {
if hunk_display_end.column() > 0 { if hunk_display_end.column() > 0 {
end_row.0 += 1; end_row.0 += 1;
} }
let is_created_file = hunk.is_created_file();
DisplayDiffHunk::Unfolded { DisplayDiffHunk::Unfolded {
status: hunk.status(), status: hunk.status(),
diff_base_byte_range: hunk.diff_base_byte_range, diff_base_byte_range: hunk.diff_base_byte_range,
@ -17291,6 +17296,7 @@ impl EditorSnapshot {
hunk.buffer_id, hunk.buffer_id,
hunk.buffer_range, hunk.buffer_range,
), ),
is_created_file,
} }
}; };

View file

@ -3948,6 +3948,7 @@ impl EditorElement {
display_row_range, display_row_range,
multi_buffer_range, multi_buffer_range,
status, status,
is_created_file,
.. ..
} = &hunk } = &hunk
{ {
@ -3979,6 +3980,7 @@ impl EditorElement {
display_row_range.start.0, display_row_range.start.0,
status, status,
multi_buffer_range.clone(), multi_buffer_range.clone(),
*is_created_file,
line_height, line_height,
&editor, &editor,
cx, cx,
@ -8786,6 +8788,7 @@ fn diff_hunk_controls(
row: u32, row: u32,
status: &DiffHunkStatus, status: &DiffHunkStatus,
hunk_range: Range<Anchor>, hunk_range: Range<Anchor>,
is_created_file: bool,
line_height: Pixels, line_height: Pixels,
editor: &Entity<Editor>, editor: &Entity<Editor>,
cx: &mut App, cx: &mut App,
@ -8801,6 +8804,7 @@ fn diff_hunk_controls(
.rounded_b_lg() .rounded_b_lg()
.bg(cx.theme().colors().editor_background) .bg(cx.theme().colors().editor_background)
.gap_1() .gap_1()
.occlude()
.child(if status.has_secondary_hunk() { .child(if status.has_secondary_hunk() {
Button::new(("stage", row as u64), "Stage") Button::new(("stage", row as u64), "Stage")
.alpha(if status.is_pending() { 0.66 } else { 1.0 }) .alpha(if status.is_pending() { 0.66 } else { 1.0 })
@ -8879,7 +8883,8 @@ fn diff_hunk_controls(
editor.restore_hunks_in_ranges(vec![point..point], window, cx); editor.restore_hunks_in_ranges(vec![point..point], window, cx);
}); });
} }
}), })
.disabled(is_created_file),
) )
.when( .when(
!editor.read(cx).buffer().read(cx).all_diff_hunks_expanded(), !editor.read(cx).buffer().read(cx).all_diff_hunks_expanded(),

View file

@ -154,6 +154,11 @@ impl MultiBufferDiffHunk {
secondary: self.secondary_status, secondary: self.secondary_status,
} }
} }
pub fn is_created_file(&self) -> bool {
self.diff_base_byte_range == (0..0)
&& self.buffer_range == (text::Anchor::MIN..text::Anchor::MAX)
}
} }
#[derive(PartialEq, Eq, Ord, PartialOrd, Clone, Hash, Debug)] #[derive(PartialEq, Eq, Ord, PartialOrd, Clone, Hash, Debug)]