FileTreeViewModel.RWMutex is removed along with the withFileTreeViewModelMutex wrapper in FilesController that RLocked it: every writer (the bounce closure, previous commit) and every reader (key handlers, disabled-reason callbacks) now runs on the UI thread, so the mutex is redundant. RefreshingFilesMutex is removed entirely, including its last use in repos_helper's DispatchSwitchTo. That use predates the bounce and was never about FilesController's optimistic-rendering concern; it serialized a repo switch's onNewRepo() against an in-flight FILES refresh for the repo being switched away from, so that a slow refresh from the old repo couldn't write into the freshly-reset model for the new one. Bouncing the write already broke that guarantee on its own terms — the mutex's critical section never covered the bounced closure's actual execution, only the (now-removed) code that enqueued it — so by this point it was only still locked here without protecting anything real; the previous commit's repo-generation guard is what now actually closes that race, making this lock fully redundant rather than just relocated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| build_tree.go | ||
| build_tree_test.go | ||
| collapsed_paths.go | ||
| commit_file_node.go | ||
| commit_file_tree.go | ||
| commit_file_tree_view_model.go | ||
| file_filter.go | ||
| file_node.go | ||
| file_node_test.go | ||
| file_tree.go | ||
| file_tree_test.go | ||
| file_tree_view_model.go | ||
| node.go | ||
| node_test.go | ||
| README.md | ||
FileTree Package
This package handles the representation of file trees. There are two ways to render files: one is to render them flat, so something like this:
dir1/file1
dir1/file2
file3
And the other is to render them as a tree
dir1/
file1
file2
file3
Internally we represent each of the above as a tree, but with the flat approach there's just a single root node and every path is a direct child of that root. Viewing in 'tree' mode (as opposed to 'flat' mode) allows for collapsing and expanding directories, and lets you perform actions on directories e.g. staging a whole directory. But it takes up more vertical space and sometimes you just want to have a flat view where you can go flick through your files one by one to see the diff.
This package is not concerned about rendering the tree: only representing its internal state.