Skip to content

git: Fix a race that caused incorrect hunk staging information#53929

Merged
cole-miller merged 1 commit intomainfrom
fix-unstaged-rage
Apr 14, 2026
Merged

git: Fix a race that caused incorrect hunk staging information#53929
cole-miller merged 1 commit intomainfrom
fix-unstaged-rage

Conversation

@cole-miller
Copy link
Copy Markdown
Member

In GitStore::open_diff_internal, when opening a DiffKind::Unstaged diff, we previously always overwrote the unstaged_diff field of BufferGitState. This causes a bug in the following situation:

  • We call open_unstaged_diff, and it hits an await point where it is loading the index text
  • While that task is suspended, we call open_uncommitted_diff. It reaches open_diff_internal and sets buffer_git_state.uncommitted_diff and buffer_git_state.unstaged_diff. It also sets the secondary diff for the uncommitted diff to be the unstaged diff that it just opened.
  • The open_unstaged_diff task wakes up and enters open_diff_internal. It creates a new entity for the unstaged diff and overwrites buffer_git_state.unstaged_diff with it, but it doesn't update the secondary diff of the uncommitted diff, which still has the entity that was produced in the previous step.
  • Now the uncommitted diff's secondary diff will never receive updates from the GitStore, causing staging information to be incorrect.

The fix is for open_diff_internal to not overwrite an existing unstaged diff.

Self-Review Checklist:

  • I've reviewed my own diff for quality, security, and reliability
  • Unsafe blocks (if any) have justifying comments
  • The content is consistent with the UI/UX checklist
  • Tests cover the new/changed behavior
  • Performance impact has been considered and is acceptable

Release Notes:

  • Fixed a bug that could cause diff hunks to have an incorrect staged status.

@cla-bot cla-bot Bot added the cla-signed The user has signed the Contributor License Agreement label Apr 14, 2026
@zed-community-bot zed-community-bot Bot added the staff Pull requests authored by a current member of Zed staff label Apr 14, 2026
@cole-miller cole-miller merged commit 652f1fa into main Apr 14, 2026
60 of 62 checks passed
@cole-miller cole-miller deleted the fix-unstaged-rage branch April 14, 2026 21:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement staff Pull requests authored by a current member of Zed staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants