jesseduffield.lazygit/pkg/commands
Stefan Haller 33b8d497c2 Guard the patch builder against concurrent access
The custom-patch git operations (move/pull/delete patch, and their rebase
continuations) run on worker goroutines and call PatchBuilder.Reset when
they've consumed the patch, clearing To and the fileInfoMap. Meanwhile the
UI thread reads that state every layout — the options bar and the mode
indicator both call Active() — so the reset raced the render.

Add a mutex. The map's entries are only ever touched on the UI thread, so
the lock only has to serialize the To field and the fileInfoMap pointer:
readers snapshot the pointer under the lock and iterate the local, and
getFileInfo drops the lock across its git diff I/O rather than holding it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 12:35:54 +02:00
..
direnv Offer direnv .envrc approval from inside lazygit 2026-06-04 09:05:01 +02:00
git_commands Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
git_config Enable errorlint linter, and fix warnings 2025-06-30 18:30:11 +02:00
hosting_service Optimize regex compilations 2026-05-10 15:28:14 +02:00
models Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
oscommands Wait for the streamed command's output goroutine before reading its buffers 2026-07-17 12:19:14 +02:00
patch Guard the patch builder against concurrent access 2026-07-17 12:35:54 +02:00
testdata Support opening lazygit in a submodule 2019-05-12 17:59:49 +10:00
git.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
git_cmd_obj_builder.go Back off exponentially between lock-error retries 2026-07-15 10:08:44 +02:00
git_cmd_obj_builder_test.go Suppress optional locks by default again, except foreground refresh 2026-07-02 16:05:08 +02:00
git_cmd_obj_runner.go Back off exponentially between lock-error retries 2026-07-15 10:08:44 +02:00
git_cmd_obj_runner_test.go Back off exponentially between lock-error retries 2026-07-15 10:08:44 +02:00