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:
parent
e7bba1c252
commit
7f23875c5e
3 changed files with 24 additions and 38 deletions
|
@ -136,7 +136,7 @@ impl CommitModal {
|
||||||
cx: &mut Context<Self>,
|
cx: &mut Context<Self>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let panel = git_panel.read(cx);
|
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| {
|
let commit_editor = git_panel.update(cx, |git_panel, cx| {
|
||||||
git_panel.set_modal_open(true, cx);
|
git_panel.set_modal_open(true, cx);
|
||||||
|
|
|
@ -1407,7 +1407,7 @@ impl GitPanel {
|
||||||
return Some(message.to_string());
|
return Some(message.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
self.suggest_commit_message()
|
self.suggest_commit_message(cx)
|
||||||
.filter(|message| !message.trim().is_empty())
|
.filter(|message| !message.trim().is_empty())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1576,7 +1576,15 @@ impl GitPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Suggests a commit message based on the changed files and their statuses
|
/// 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 {
|
let git_status_entry = if let Some(staged_entry) = &self.single_staged_entry {
|
||||||
Some(staged_entry)
|
Some(staged_entry)
|
||||||
} else if let Some(single_tracked_entry) = &self.single_tracked_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>) {
|
pub(crate) fn fetch(&mut self, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
if !self.can_push_and_pull(cx) {
|
if !self.can_push_and_pull(cx) {
|
||||||
return;
|
return;
|
||||||
|
@ -2181,7 +2176,6 @@ impl GitPanel {
|
||||||
git_panel.clear_pending();
|
git_panel.clear_pending();
|
||||||
}
|
}
|
||||||
git_panel.update_visible_entries(cx);
|
git_panel.update_visible_entries(cx);
|
||||||
git_panel.update_editor_placeholder(cx);
|
|
||||||
git_panel.update_scrollbar_properties(window, cx);
|
git_panel.update_scrollbar_properties(window, cx);
|
||||||
})
|
})
|
||||||
.ok();
|
.ok();
|
||||||
|
@ -2217,7 +2211,7 @@ impl GitPanel {
|
||||||
git_panel.commit_editor = cx.new(|cx| {
|
git_panel.commit_editor = cx.new(|cx| {
|
||||||
commit_message_editor(
|
commit_message_editor(
|
||||||
buffer,
|
buffer,
|
||||||
git_panel.suggest_commit_message().as_deref(),
|
git_panel.suggest_commit_message(cx).as_deref(),
|
||||||
git_panel.project.clone(),
|
git_panel.project.clone(),
|
||||||
true,
|
true,
|
||||||
window,
|
window,
|
||||||
|
@ -2237,6 +2231,7 @@ impl GitPanel {
|
||||||
fn update_visible_entries(&mut self, cx: &mut Context<Self>) {
|
fn update_visible_entries(&mut self, cx: &mut Context<Self>) {
|
||||||
self.entries.clear();
|
self.entries.clear();
|
||||||
self.single_staged_entry.take();
|
self.single_staged_entry.take();
|
||||||
|
self.single_tracked_entry.take();
|
||||||
self.conflicted_count = 0;
|
self.conflicted_count = 0;
|
||||||
self.conflicted_staged_count = 0;
|
self.conflicted_staged_count = 0;
|
||||||
self.new_count = 0;
|
self.new_count = 0;
|
||||||
|
@ -2396,6 +2391,15 @@ impl GitPanel {
|
||||||
|
|
||||||
self.select_first_entry_if_none(cx);
|
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();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -605,20 +605,9 @@ impl GitStore {
|
||||||
}
|
}
|
||||||
// Update the statuses and merge message but keep everything else.
|
// Update the statuses and merge message but keep everything else.
|
||||||
let existing_handle = handle.clone();
|
let existing_handle = handle.clone();
|
||||||
existing_handle.update(cx, |existing_handle, cx| {
|
existing_handle.update(cx, |existing_handle, _| {
|
||||||
existing_handle.repository_entry = repo.clone();
|
existing_handle.repository_entry = repo.clone();
|
||||||
if matches!(git_repo, GitRepo::Local { .. })
|
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);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
existing_handle.merge_message = merge_message;
|
existing_handle.merge_message = merge_message;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -2177,7 +2166,6 @@ impl Repository {
|
||||||
buffer_store: Entity<BufferStore>,
|
buffer_store: Entity<BufferStore>,
|
||||||
cx: &mut Context<Self>,
|
cx: &mut Context<Self>,
|
||||||
) -> Task<Result<Entity<Buffer>>> {
|
) -> Task<Result<Entity<Buffer>>> {
|
||||||
let merge_message = self.merge_message.clone();
|
|
||||||
cx.spawn(|repository, mut cx| async move {
|
cx.spawn(|repository, mut cx| async move {
|
||||||
let buffer = buffer_store
|
let buffer = buffer_store
|
||||||
.update(&mut cx, |buffer_store, cx| buffer_store.create_buffer(cx))?
|
.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.update(&mut cx, |repository, _| {
|
||||||
repository.commit_message_buffer = Some(buffer.clone());
|
repository.commit_message_buffer = Some(buffer.clone());
|
||||||
})?;
|
})?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue