diff --git a/crates/git_ui/src/commit_modal.rs b/crates/git_ui/src/commit_modal.rs index a1449a73ea..0bcbd2a71f 100644 --- a/crates/git_ui/src/commit_modal.rs +++ b/crates/git_ui/src/commit_modal.rs @@ -136,7 +136,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 b52bd34419..57a9453fb6 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -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 { + 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 { @@ -1712,19 +1720,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; @@ -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.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(); } diff --git a/crates/project/src/git.rs b/crates/project/src/git.rs index 81e4b43131..51271f9b77 100644 --- a/crates/project/src/git.rs +++ b/crates/project/src/git.rs @@ -605,20 +605,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; } }); @@ -2177,7 +2166,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))? @@ -2190,12 +2178,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()); })?;