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()); })?;