From e8dab9c9af4718834f6eddd4ea9ccbb2ab85712c Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Tue, 18 Mar 2025 13:21:20 -0400 Subject: [PATCH] Fold git merge messages into commit editor placeholder text (#26992) This PR changes the git commit message editors to surface git's suggested merge message, if any, as placeholder text, as opposed to "real" buffer text as was previously the case. Release Notes: - Changed git commit message editors to use placeholder text for git's suggested merge messages --- crates/git_ui/src/commit_modal.rs | 2 +- crates/git_ui/src/git_panel.rs | 38 +++++++++++++++++-------------- crates/project/src/git.rs | 22 ++---------------- 3 files changed, 24 insertions(+), 38 deletions(-) diff --git a/crates/git_ui/src/commit_modal.rs b/crates/git_ui/src/commit_modal.rs index b6c89f96fe2fd2728d8323ebd8b28b6e63ce8d6b..0d937026f8556eee469b4e6c5224a2be5ddb11cf 100644 --- a/crates/git_ui/src/commit_modal.rs +++ b/crates/git_ui/src/commit_modal.rs @@ -146,7 +146,7 @@ impl CommitModal { cx: &mut Context, ) -> Self { let panel = git_panel.read(cx); - let suggested_commit_message = panel.suggest_commit_message(); + let suggested_commit_message = panel.suggest_commit_message(cx); let commit_editor = git_panel.update(cx, |git_panel, cx| { git_panel.set_modal_open(true, cx); diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs index afc8667c60fd8dd7fcf461e0279ba1df4c7aaef1..9ff0c7e33172757e8f28d4fe6ad8b2f58ccc003b 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -1413,7 +1413,7 @@ impl GitPanel { return Some(message.to_string()); } - self.suggest_commit_message() + self.suggest_commit_message(cx) .filter(|message| !message.trim().is_empty()) } @@ -1582,7 +1582,15 @@ impl GitPanel { } /// Suggests a commit message based on the changed files and their statuses - pub fn suggest_commit_message(&self) -> Option { + pub fn suggest_commit_message(&self, cx: &App) -> Option { + if let Some(merge_message) = self + .active_repository + .as_ref() + .and_then(|repo| repo.read(cx).merge_message.as_ref()) + { + return Some(merge_message.clone()); + } + let git_status_entry = if let Some(staged_entry) = &self.single_staged_entry { Some(staged_entry) } else if let Some(single_tracked_entry) = &self.single_tracked_entry { @@ -1718,19 +1726,6 @@ impl GitPanel { })); } - fn update_editor_placeholder(&mut self, cx: &mut Context) { - let suggested_commit_message = self.suggest_commit_message(); - let placeholder_text = suggested_commit_message - .as_deref() - .unwrap_or("Enter commit message"); - - self.commit_editor.update(cx, |editor, cx| { - editor.set_placeholder_text(Arc::from(placeholder_text), cx) - }); - - cx.notify(); - } - pub(crate) fn fetch(&mut self, window: &mut Window, cx: &mut Context) { if !self.can_push_and_pull(cx) { return; @@ -2187,7 +2182,6 @@ impl GitPanel { git_panel.clear_pending(); } git_panel.update_visible_entries(cx); - git_panel.update_editor_placeholder(cx); git_panel.update_scrollbar_properties(window, cx); }) .ok(); @@ -2223,7 +2217,7 @@ impl GitPanel { git_panel.commit_editor = cx.new(|cx| { commit_message_editor( buffer, - git_panel.suggest_commit_message().as_deref(), + git_panel.suggest_commit_message(cx).as_deref(), git_panel.project.clone(), true, window, @@ -2243,6 +2237,7 @@ impl GitPanel { fn update_visible_entries(&mut self, cx: &mut Context) { self.entries.clear(); self.single_staged_entry.take(); + self.single_tracked_entry.take(); self.conflicted_count = 0; self.conflicted_staged_count = 0; self.new_count = 0; @@ -2402,6 +2397,15 @@ impl GitPanel { self.select_first_entry_if_none(cx); + let suggested_commit_message = self.suggest_commit_message(cx); + let placeholder_text = suggested_commit_message + .as_deref() + .unwrap_or("Enter commit message"); + + self.commit_editor.update(cx, |editor, cx| { + editor.set_placeholder_text(Arc::from(placeholder_text), cx) + }); + cx.notify(); } diff --git a/crates/project/src/git.rs b/crates/project/src/git.rs index f459e2c5c459ebacabb2fcfa60268cb4658c20a2..e81b4be9429f104244fd3ef27912e126fd7cadd7 100644 --- a/crates/project/src/git.rs +++ b/crates/project/src/git.rs @@ -318,20 +318,9 @@ impl GitStore { } // Update the statuses and merge message but keep everything else. let existing_handle = handle.clone(); - existing_handle.update(cx, |existing_handle, cx| { + existing_handle.update(cx, |existing_handle, _| { existing_handle.repository_entry = repo.clone(); - if matches!(git_repo, GitRepo::Local { .. }) - && existing_handle.merge_message != merge_message - { - if let (Some(merge_message), Some(buffer)) = - (&merge_message, &existing_handle.commit_message_buffer) - { - buffer.update(cx, |buffer, cx| { - if buffer.is_empty() { - buffer.set_text(merge_message.as_str(), cx); - } - }) - } + if matches!(git_repo, GitRepo::Local { .. }) { existing_handle.merge_message = merge_message; } }); @@ -1257,7 +1246,6 @@ impl Repository { buffer_store: Entity, cx: &mut Context, ) -> Task>> { - let merge_message = self.merge_message.clone(); cx.spawn(|repository, mut cx| async move { let buffer = buffer_store .update(&mut cx, |buffer_store, cx| buffer_store.create_buffer(cx))? @@ -1270,12 +1258,6 @@ impl Repository { })?; } - if let Some(merge_message) = merge_message { - buffer.update(&mut cx, |buffer, cx| { - buffer.set_text(merge_message.as_str(), cx) - })?; - } - repository.update(&mut cx, |repository, _| { repository.commit_message_buffer = Some(buffer.clone()); })?;