From a5f96909cb2dcf5128219fbb66ee47377aec4c25 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 27 Feb 2025 19:19:58 -0500 Subject: [PATCH] Update to suggest commit message based on file staging (#25790) Currently, you only get a suggested commit message if you have a single changed file in the repository. After the PR, the suggest happens per single-staged file. https://github.com/user-attachments/assets/4cc19fe6-099c-4690-967d-898b8ca7540b Release Notes: - N/A --- crates/git_ui/src/git_panel.rs | 55 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs index d59714c44729b033965c7eba3b4d50b515fb5ebb..ba6a0fbdcaa5f3afc4d828e7aa9efc3b9c6afb94 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -1257,40 +1257,39 @@ impl GitPanel { /// Suggests a commit message based on the changed files and their statuses pub fn suggest_commit_message(&self) -> Option { - let entries = self + if self.total_staged_count() != 1 { + return None; + } + + let entry = self .entries .iter() - .filter_map(|entry| { - if let GitListEntry::GitStatusEntry(status_entry) = entry { - Some(status_entry) - } else { - None - } - }) - .collect::>(); + .find(|entry| match entry.status_entry() { + Some(entry) => entry.is_staged.unwrap_or(false), + _ => false, + })?; - if entries.is_empty() { - None - } else if entries.len() == 1 { - let entry = &entries[0]; - let file_name = entry - .repo_path - .file_name() - .unwrap_or_default() - .to_string_lossy(); + let GitListEntry::GitStatusEntry(git_status_entry) = entry.clone() else { + return None; + }; - if entry.status.is_deleted() { - Some(format!("Delete {}", file_name)) - } else if entry.status.is_created() { - Some(format!("Create {}", file_name)) - } else if entry.status.is_modified() { - Some(format!("Update {}", file_name)) - } else { - None - } + let action_text = if git_status_entry.status.is_deleted() { + Some("Delete") + } else if git_status_entry.status.is_created() { + Some("Create") + } else if git_status_entry.status.is_modified() { + Some("Update") } else { None - } + }; + + let file_name = git_status_entry + .repo_path + .file_name() + .unwrap_or_default() + .to_string_lossy(); + + Some(format!("{} {}", action_text?, file_name)) } fn update_editor_placeholder(&mut self, cx: &mut Context) {