git: Fix a race that caused incorrect hunk staging information#53929
Merged
cole-miller merged 1 commit intomainfrom Apr 14, 2026
Merged
git: Fix a race that caused incorrect hunk staging information#53929cole-miller merged 1 commit intomainfrom
cole-miller merged 1 commit intomainfrom
Conversation
maxbrunsfeld
approved these changes
Apr 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In
GitStore::open_diff_internal, when opening aDiffKind::Unstageddiff, we previously always overwrote theunstaged_difffield ofBufferGitState. This causes a bug in the following situation:open_unstaged_diff, and it hits an await point where it is loading the index textopen_uncommitted_diff. It reachesopen_diff_internaland setsbuffer_git_state.uncommitted_diffandbuffer_git_state.unstaged_diff. It also sets the secondary diff for the uncommitted diff to be the unstaged diff that it just opened.open_unstaged_difftask wakes up and entersopen_diff_internal. It creates a new entity for the unstaged diff and overwritesbuffer_git_state.unstaged_diffwith 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.GitStore, causing staging information to be incorrect.The fix is for
open_diff_internalto not overwrite an existing unstaged diff.Self-Review Checklist:
Release Notes: