jesseduffield.lazygit/pkg/gui/controllers/helpers
Stefan Haller fd6b20847a Capture the files, reflog, branches and stash refresh inputs
The remaining refresh scopes each still read model, context, and mode state
directly on their worker, racing the UI thread — the same class of race the
commits refresh had:

- files reads Model.Files (to detect resolved conflicts and drive the
  auto-stage) and the Files context's ForceShowUntracked;
- reflog reads the existing reflog slices (for the incremental fetch),
  Model.HashPool and the filtering path/author;
- branches reads Model.MainBranches and the previous branches (for the
  BehindBaseBranch carry-over);
- stash reads the filtering path.

Gather each scope's inputs into an immutable snapshot on the UI thread (via
captureOnUIThread) before dispatching the git work, and have the refresh
compute from the snapshot — for branches, threaded through both the immediate
and the recency-sorted startup loads, which share one snapshot (the
BehindBaseBranch carry-over is identical either way). Status, tags and
worktrees read nothing UI-owned, so they're left alone.

For the snapshots to actually run on the UI thread, the worker callers that
reach these scopes must announce themselves: convert the submodule
operations, the submodule stash-and-reset, and the background files poller
to RefreshFromWorker.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 18:10:45 +02:00
..
amend_helper.go Allow passing refresh scope to WithGpgHandling 2025-03-24 08:41:58 +01:00
app_status_helper.go Exclude toast rendering from the busy query 2026-07-07 18:09:33 +02:00
bisect_helper.go Change Refresh to not return an error 2025-07-02 16:09:42 +02:00
branches_helper.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
cherry_pick_helper.go Route merge/rebase result handling to the right refresh entry point 2026-07-07 18:10:45 +02:00
commits_helper.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
commits_helper_test.go Remove hard line breaks when rewording commits 2024-03-09 10:00:44 +01:00
confirmation_helper.go Add comments 2026-03-08 17:24:26 +01:00
credentials_helper.go chore: fix function name in comment 2025-12-06 18:28:58 +08:00
diff_helper.go Move the Ref interface from gui/types to models 2025-07-31 15:21:34 +02:00
files_helper.go Cleanup: remove unused interfaces for helpers 2025-04-08 16:08:25 +02:00
fixup_helper.go Ignore fixup commits for a found base commit when doing ctrl-f 2026-01-24 16:04:35 +01:00
fixup_helper_test.go Ignore fixup commits for a found base commit when doing ctrl-f 2026-01-24 16:04:35 +01:00
gpg_helper.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
helpers.go Implement suspending the app using ctrl-z 2025-08-14 20:41:46 +02:00
host_helper.go Cleanup: remove unused interfaces for helpers 2025-04-08 16:08:25 +02:00
inline_status_helper.go Re-render to clear an inline status when its operation finishes 2026-07-07 17:46:16 +02:00
menu_key.go Use a slice of keys for each binding 2026-05-25 15:18:18 +02:00
merge_and_rebase_helper.go Route merge/rebase result handling to the right refresh entry point 2026-07-07 18:10:45 +02:00
merge_conflicts_helper.go Tag background routines and their refreshes as background tasks 2026-07-07 18:09:33 +02:00
mode_helper.go Make RefreshOptions.Then a func() error, queue it via OnUIThread 2026-07-07 18:09:33 +02:00
patch_building_helper.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
record_directory_helper.go split context common from helper common 2023-04-30 13:19:53 +10:00
refresh_helper.go Capture the files, reflog, branches and stash refresh inputs 2026-07-07 18:10:45 +02:00
refresh_helper_test.go Restore commit selection even when the commit's TODO status changed 2026-06-23 09:20:05 +02:00
refs_helper.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
repos_helper.go Refuse a repo switch while a foreground operation is in flight 2026-07-07 18:09:33 +02:00
search_helper.go Cleanup: remove unnecessary function Label() 2026-04-30 22:14:26 +02:00
signal_handling.go Implement suspending the app using ctrl-z 2025-08-14 20:41:46 +02:00
signal_handling_windows.go Implement suspending the app using ctrl-z 2025-08-14 20:41:46 +02:00
snake_helper.go Bump gocui and adapt lazygit code 2024-12-01 10:40:08 +01:00
staging_helper.go Add user config to use hunk mode by default when entering staging view 2025-07-04 19:41:40 +02:00
sub_commits_helper.go Remove refresh mutexes made redundant by bouncing 2026-07-07 18:09:33 +02:00
suggestions_helper.go Rework the worktrees-panel 'n' into a branch picker 2026-07-03 18:53:05 +02:00
suspend_resume_helper.go Implement suspending the app using ctrl-z 2025-08-14 20:41:46 +02:00
tags_helper.go Convert keybinding fields to Keybinding 2026-05-25 15:32:47 +02:00
update_helper.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
upstream_helper.go Cleanup: remove unused interfaces for helpers 2025-04-08 16:08:25 +02:00
upstream_helper_test.go Standardise on using lo for slice functions 2023-07-30 18:51:23 +10:00
view_helper.go standardise helper args 2023-04-30 13:19:53 +10:00
window_arrangement_helper.go Add gui.shrinkSidePanelsToContent option 2026-07-03 19:25:01 +02:00
window_arrangement_helper_test.go Add gui.shrinkSidePanelsToContent option 2026-07-03 19:25:01 +02:00
window_helper.go Drive the side panel layout from gui.sidePanels 2026-06-23 14:15:18 +02:00
working_tree_helper.go Move post-FILES-refresh model reads into Then 2026-07-07 18:09:33 +02:00
worktree_helper.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
worktree_helper_test.go Add helper to compute candidate worktree parent directories 2026-07-03 18:53:05 +02:00