Fix git worktree popup popup no worktree when opened in a project#55053
Conversation
|
Heya, thanks for the PR! How different is this solution from #55044 which was opened just a few hours before yours? It feels like different takes for the same problem. |
Hey @danilo-leal — these two PRs are actually fixing different bugs in the same bare worktree layout:
Both were reported by the same user with the same repo layout, which makes them look related but I believe they are solving two different bugs? |
|
@OmChillure for a second your PR was attempting to close the same issue I worked on in the Github UI that's why @danilo-leal was confused I guess |
|
@OmChillure I merged main and made some changes to this. I took your |
|
/cherry-pick preview |
…5053) (cherry-pick to preview) (#55790) Cherry-pick of #55053 to preview ---- ## Summary Fixes the `git: worktree` popup showing no worktrees when a project is opened at the parent of a `.bare` directory (the common bare-clone-with-sibling-worktrees layout). ## What's fixed - `crates/git/src/repository.rs` - New `git_binary_for_worktree_list` helper that uses `repository.path()` as the working directory when `workdir()` is `None`. - `worktrees()` switched to the new helper. - `parse_worktrees_from_str` accepts bare entries without a `HEAD` line. - Tests - Unit test: parser handles a bare entry with no `HEAD` followed by a normal worktree entry. - Integration test: full `.git`-file → `.bare` + sibling worktrees layout (`main`, `feature-a`, `feature-b`) is listed correctly via the real `git` binary. UI rendering already gates on empty sha (`worktree_picker.rs` uses `.when(!sha.is_empty(), ...)`), so the bare entry's empty sha renders without artifacts. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments — N/A, no `unsafe` - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable — same single `git worktree list --porcelain` invocation, no extra work #### Closes #54824 Video [Screencast from 2026-04-28 09-43-45.webm](https://github.com/user-attachments/assets/e414d546-eb61-4cb2-857e-3c392f416f96) Release Notes: - Fixed the `git: worktree` popup listing no worktrees when a project was opened at the parent of a `.bare` directory (bare-clone-with-sibling-worktrees layout). --------- Co-authored-by: Max Brunsfeld <[email protected]> Co-authored-by: Om Chillure <[email protected]> Co-authored-by: Max Brunsfeld <[email protected]>
…d-industries#55053) ## Summary Fixes the `git: worktree` popup showing no worktrees when a project is opened at the parent of a `.bare` directory (the common bare-clone-with-sibling-worktrees layout). ## What's fixed - `crates/git/src/repository.rs` - New `git_binary_for_worktree_list` helper that uses `repository.path()` as the working directory when `workdir()` is `None`. - `worktrees()` switched to the new helper. - `parse_worktrees_from_str` accepts bare entries without a `HEAD` line. - Tests - Unit test: parser handles a bare entry with no `HEAD` followed by a normal worktree entry. - Integration test: full `.git`-file → `.bare` + sibling worktrees layout (`main`, `feature-a`, `feature-b`) is listed correctly via the real `git` binary. UI rendering already gates on empty sha (`worktree_picker.rs` uses `.when(!sha.is_empty(), ...)`), so the bare entry's empty sha renders without artifacts. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments — N/A, no `unsafe` - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable — same single `git worktree list --porcelain` invocation, no extra work #### Closes zed-industries#54824 Video [Screencast from 2026-04-28 09-43-45.webm](https://github.com/user-attachments/assets/e414d546-eb61-4cb2-857e-3c392f416f96) Release Notes: - Fixed the `git: worktree` popup listing no worktrees when a project was opened at the parent of a `.bare` directory (bare-clone-with-sibling-worktrees layout). --------- Co-authored-by: Max Brunsfeld <[email protected]>
Summary
Fixes the
git: worktreepopup showing no worktrees when a project is opened at the parent of a.baredirectory (the common bare-clone-with-sibling-worktrees layout).What's fixed
crates/git/src/repository.rsgit_binary_for_worktree_listhelper that usesrepository.path()as the working directory whenworkdir()isNone.worktrees()switched to the new helper.parse_worktrees_from_straccepts bare entries without aHEADline.Tests
HEADfollowed by a normal worktree entry..git-file →.bare+ sibling worktrees layout (main,feature-a,feature-b) is listed correctly via the realgitbinary.UI rendering already gates on empty sha (
worktree_picker.rsuses.when(!sha.is_empty(), ...)), so the bare entry's empty sha renders without artifacts.Self-Review Checklist:
unsafegit worktree list --porcelaininvocation, no extra workCloses #54824
Video
Screencast.from.2026-04-28.09-43-45.webm
Release Notes:
git: worktreepopup listing no worktrees when a project was opened at the parent of a.baredirectory (bare-clone-with-sibling-worktrees layout).