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
This commit is contained in:
Cole Miller 2025-03-18 13:21:20 -04:00 committed by GitHub
parent e7bba1c252
commit 7f23875c5e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 38 deletions

View file

@ -136,7 +136,7 @@ impl CommitModal {
cx: &mut Context<Self>,
) -> 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);

View file

@ -1407,7 +1407,7 @@ impl GitPanel {
return Some(message.to_string());
}
self.suggest_commit_message()
self.suggest_commit_message(cx)
.filter(|message| !message.trim().is_empty())
}
@ -1576,7 +1576,15 @@ impl GitPanel {
}
/// Suggests a commit message based on the changed files and their statuses
pub fn suggest_commit_message(&self) -> Option<String> {
pub fn suggest_commit_message(&self, cx: &App) -> Option<String> {
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 {
@ -1712,19 +1720,6 @@ impl GitPanel {
}));
}
fn update_editor_placeholder(&mut self, cx: &mut Context<Self>) {
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<Self>) {
if !self.can_push_and_pull(cx) {
return;
@ -2181,7 +2176,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();
@ -2217,7 +2211,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,
@ -2237,6 +2231,7 @@ impl GitPanel {
fn update_visible_entries(&mut self, cx: &mut Context<Self>) {
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;
@ -2396,6 +2391,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();
}