From 43c81067c735e0cd1e1aca4bcbe72795f2a2ca9a Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:51:36 -0500 Subject: [PATCH] Disable restore hunk control for created files (cherry-pick #25841) (#26251) Cherry-picked Disable restore hunk control for created files (#25841) Release Notes: - Git Beta: disable hunk restore action and button for created files Co-authored-by: Cole Miller --- crates/editor/src/editor.rs | 6 ++++++ crates/editor/src/element.rs | 7 ++++++- crates/multi_buffer/src/multi_buffer.rs | 5 +++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index c9788d4e947ab99946748c56cbe8caa778b1ee20..c355747ee2c3f17ae9748d330347e0489a3836e4 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -260,6 +260,7 @@ enum DisplayDiffHunk { display_row: DisplayRow, }, Unfolded { + is_created_file: bool, diff_base_byte_range: Range, display_row_range: Range, multi_buffer_range: Range, @@ -7812,6 +7813,9 @@ impl Editor { hunk: &MultiBufferDiffHunk, cx: &mut App, ) -> Option<()> { + if hunk.is_created_file() { + return None; + } let buffer = self.buffer.read(cx); let diff = buffer.diff_for(hunk.buffer_id)?; let buffer = buffer.buffer(hunk.buffer_id)?; @@ -17189,6 +17193,7 @@ impl EditorSnapshot { if hunk_display_end.column() > 0 { end_row.0 += 1; } + let is_created_file = hunk.is_created_file(); DisplayDiffHunk::Unfolded { status: hunk.status(), diff_base_byte_range: hunk.diff_base_byte_range, @@ -17198,6 +17203,7 @@ impl EditorSnapshot { hunk.buffer_id, hunk.buffer_range, ), + is_created_file, } }; diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 92e81863363b8749abbfeda87d8832012f32fe89..0ac7a547ecce443e5c62f4613fcbf8bbefd4bb3a 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -3948,6 +3948,7 @@ impl EditorElement { display_row_range, multi_buffer_range, status, + is_created_file, .. } = &hunk { @@ -3979,6 +3980,7 @@ impl EditorElement { display_row_range.start.0, status, multi_buffer_range.clone(), + *is_created_file, line_height, &editor, cx, @@ -8786,6 +8788,7 @@ fn diff_hunk_controls( row: u32, status: &DiffHunkStatus, hunk_range: Range, + is_created_file: bool, line_height: Pixels, editor: &Entity, cx: &mut App, @@ -8801,6 +8804,7 @@ fn diff_hunk_controls( .rounded_b_lg() .bg(cx.theme().colors().editor_background) .gap_1() + .occlude() .child(if status.has_secondary_hunk() { Button::new(("stage", row as u64), "Stage") .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); }); } - }), + }) + .disabled(is_created_file), ) .when( !editor.read(cx).buffer().read(cx).all_diff_hunks_expanded(), diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index 0fc3f9f2cfcfb0a75ac5a3e8d9c750530ce3af6f..b8595f5d866f81ac66338498294b8175e84c70b8 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -154,6 +154,11 @@ impl MultiBufferDiffHunk { 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)]