@@ -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);
@@ -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();
}
@@ -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<BufferStore>,
cx: &mut Context<Self>,
) -> Task<Result<Entity<Buffer>>> {
- 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());
})?;