Skip to content

git: Fix panic in split diff when edits cause excerpts to merge#49122

Merged
cole-miller merged 9 commits intomainfrom
panic-at-the-split-diff
Feb 17, 2026
Merged

git: Fix panic in split diff when edits cause excerpts to merge#49122
cole-miller merged 9 commits intomainfrom
panic-at-the-split-diff

Conversation

@cole-miller
Copy link
Member

Our strategy for keeping excerpts in sync between the two sides of the split diff is generally

  • mutate the excerpts on the RHS
  • pull out the new excerpts for the affected path from the RHS
  • translate those ranges to the LHS
  • update the LHS excerpts with those ranges

But this can break down when the translated ranges overlap on the LHS despite the original ranges not overlapping on the RHS. This can happen, for example, when a large deletion in a file crosses several excerpt boundaries. It's rare because normally excerpt boundaries in the project diff and branch diff are adjusted to keep entire diff hunks in view, but we defer this for dirty files, so it's not hard to trigger it when using the agent or editing an individual file while the diff is open in another tab.

Release Notes:

  • Fixed a panic that could occur when editing files while the project diff or branch diff was open.

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Feb 13, 2026
@zed-community-bot zed-community-bot bot added the staff Pull requests authored by a current member of Zed staff label Feb 13, 2026
@cole-miller cole-miller enabled auto-merge (squash) February 17, 2026 01:07
@cole-miller cole-miller merged commit fefb81c into main Feb 17, 2026
27 checks passed
@cole-miller cole-miller deleted the panic-at-the-split-diff branch February 17, 2026 01:40
rtfeldman pushed a commit that referenced this pull request Feb 17, 2026
Our strategy for keeping excerpts in sync between the two sides of the
split diff is generally

- mutate the excerpts on the RHS
- pull out the new excerpts for the affected path from the RHS
- translate those ranges to the LHS
- update the LHS excerpts with those ranges

But this can break down when the translated ranges overlap on the LHS
despite the original ranges not overlapping on the RHS. This can happen,
for example, when a large deletion in a file crosses several excerpt
boundaries. It's rare because normally excerpt boundaries in the project
diff and branch diff are adjusted to keep entire diff hunks in view, but
we defer this for dirty files, so it's not hard to trigger it when using
the agent or editing an individual file while the diff is open in
another tab.

Release Notes:

- Fixed a panic that could occur when editing files while the project
diff or branch diff was open.

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
@cole-miller
Copy link
Member Author

/cherry-pick preview

github-actions bot pushed a commit that referenced this pull request Feb 17, 2026
Our strategy for keeping excerpts in sync between the two sides of the
split diff is generally

- mutate the excerpts on the RHS
- pull out the new excerpts for the affected path from the RHS
- translate those ranges to the LHS
- update the LHS excerpts with those ranges

But this can break down when the translated ranges overlap on the LHS
despite the original ranges not overlapping on the RHS. This can happen,
for example, when a large deletion in a file crosses several excerpt
boundaries. It's rare because normally excerpt boundaries in the project
diff and branch diff are adjusted to keep entire diff hunks in view, but
we defer this for dirty files, so it's not hard to trigger it when using
the agent or editing an individual file while the diff is open in
another tab.

Release Notes:

- Fixed a panic that could occur when editing files while the project
diff or branch diff was open.

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy bot added a commit that referenced this pull request Feb 17, 2026
…) (cherry-pick to preview) (#49413)

Cherry-pick of #49122 to preview

----
Our strategy for keeping excerpts in sync between the two sides of the
split diff is generally

- mutate the excerpts on the RHS
- pull out the new excerpts for the affected path from the RHS
- translate those ranges to the LHS
- update the LHS excerpts with those ranges

But this can break down when the translated ranges overlap on the LHS
despite the original ranges not overlapping on the RHS. This can happen,
for example, when a large deletion in a file crosses several excerpt
boundaries. It's rare because normally excerpt boundaries in the project
diff and branch diff are adjusted to keep entire diff hunks in view, but
we defer this for dirty files, so it's not hard to trigger it when using
the agent or editing an individual file while the diff is open in
another tab.

Release Notes:

- Fixed a panic that could occur when editing files while the project
diff or branch diff was open.

---------

Co-authored-by: Zed Zippy
<234243425+zed-zippy[bot]@users.noreply.github.com>

Co-authored-by: Cole Miller <cole@zed.dev>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
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.

1 participant