project: Show detached head commit SHA in branch pickers (#29007)
When Git is in a detached HEAD state, the branch is `None`, and we can't get any meaningful information from it. This PR adds a `head_commit` field to the snapshot, which is always populated with the HEAD details, even when the branch is `None`. This also pave path to fix: https://github.com/zed-industries/zed/issues/28736 git panel branch picker (before, after): <img width="197" alt="image" src="https://github.com/user-attachments/assets/0b6abbba-2988-4890-a708-bcd8aad84f26" /> <img width="198" alt="image" src="https://github.com/user-attachments/assets/4b08b1a8-5e79-4aa3-a44e-932249602c18" /> title bar branch picker (before, after): <img width="183" alt="image" src="https://github.com/user-attachments/assets/d94357f8-a4da-4d60-8ddd-fdd978b99fdf" /> <img width="228" alt="image" src="https://github.com/user-attachments/assets/d20824a1-9279-44d6-afd1-bf9319fc50e4" /> Release Notes: - Added head commit SHA information to the Git branch picker in the title bar and Git panel.
This commit is contained in:
parent
c2cd4fd7a1
commit
ba7f886c62
8 changed files with 109 additions and 7 deletions
|
@ -46,6 +46,7 @@ pub use stories::*;
|
|||
|
||||
const MAX_PROJECT_NAME_LENGTH: usize = 40;
|
||||
const MAX_BRANCH_NAME_LENGTH: usize = 40;
|
||||
const MAX_SHORT_SHA_LENGTH: usize = 8;
|
||||
|
||||
const BOOK_ONBOARDING: &str = "https://dub.sh/zed-c-onboarding";
|
||||
|
||||
|
@ -513,8 +514,23 @@ impl TitleBar {
|
|||
pub fn render_project_branch(&self, cx: &mut Context<Self>) -> Option<impl IntoElement> {
|
||||
let repository = self.project.read(cx).active_repository(cx)?;
|
||||
let workspace = self.workspace.upgrade()?;
|
||||
let branch_name = repository.read(cx).branch.as_ref()?.name.clone();
|
||||
let branch_name = util::truncate_and_trailoff(&branch_name, MAX_BRANCH_NAME_LENGTH);
|
||||
let branch_name = {
|
||||
let repo = repository.read(cx);
|
||||
repo.branch
|
||||
.as_ref()
|
||||
.map(|branch| branch.name.clone())
|
||||
.map(|name| util::truncate_and_trailoff(&name, MAX_BRANCH_NAME_LENGTH))
|
||||
.or_else(|| {
|
||||
repo.head_commit.as_ref().map(|commit| {
|
||||
commit
|
||||
.sha
|
||||
.chars()
|
||||
.take(MAX_SHORT_SHA_LENGTH)
|
||||
.collect::<String>()
|
||||
})
|
||||
})
|
||||
}?;
|
||||
|
||||
Some(
|
||||
Button::new("project_branch_trigger", branch_name)
|
||||
.color(Color::Muted)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue