- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2.3k
Fix branch selection jumping back on background fetch #4597
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| Coverage summary from CodacySee diff coverage on Codacy
 Coverage variation details
 Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:  Diff coverage details
 Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:  See your quality gate settings Change summary preferencesFootnotes
 | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice one!
When refreshing the branches list, we have code to keep the same branch selected even when the refresh changes the sort order; this code remembers the selected branch before the refresh, and then tries to select it again afterwards (looking it up by name) if it is still there. However, we stored the previously selected branch too early, before even obtaining the branches list; if the user moved the selection between that point and the end of the refresh, it would jump back. Fix this by remembering the previous selection only at the last moment, right before assigning the new branches slice. We still have a race condition here between the UI code that manages the selection as the user presses arrow keys, and the background thread doing the refresh that reads and restores the selection; however, the race was there before, and we make it neither better nor worse with this PR. It doesn't seem to be a problem in practice.
a4290fa    to
    fce4816      
    Compare
  
    This MR contains the following updates: | Package | Update | Change | |---|---|---| | [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) | minor | `v0.51.1` -> `v0.52.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary> ### [`v0.52.0`](https://github.com/jesseduffield/lazygit/releases/tag/v0.52.0) [Compare Source](jesseduffield/lazygit@v0.51.1...v0.52.0) <!-- Release notes generated using configuration in .github/release.yml at v0.52.0 --> #### What's Changed ##### Enhancements 🔥 - Add user config for hiding the root item in the file tree by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4593 - Use branchPrefix when moving commits to new branch by [@​EliasA5](https://github.com/EliasA5) in jesseduffield/lazygit#4604 - Show default option when prompting to create a new git repo by [@​Joshuahuahua](https://github.com/Joshuahuahua) in jesseduffield/lazygit#4596 ##### Fixes 🔧 - Fix selecting large hunks, and fix problems editing very long commit descriptions by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4589 - Kill background fetch when it requests a passphrase by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4588 - Fix branch selection jumping back on background fetch by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4597 - Fix resetting to a branch when a tag shares the same name, or vice versa by [@​ChrisMcD1](https://github.com/ChrisMcD1) in jesseduffield/lazygit#4571 - Fix wrong inactive highlight when switching between repos by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4621 - Fix assigning custom key to pullFiles command in the Commits panel by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4617 ##### Maintenance ⚙️ - Replace literal with ConfigFilename constant by [@​mloskot](https://github.com/mloskot) in jesseduffield/lazygit#4613 - Improve MR template wrt release notes by [@​stefanhaller](https://github.com/stefanhaller) in jesseduffield/lazygit#4607 #### New Contributors - [@​mloskot](https://github.com/mloskot) made their first contribution in jesseduffield/lazygit#4613 - [@​Joshuahuahua](https://github.com/Joshuahuahua) made their first contribution in jesseduffield/lazygit#4596 **Full Changelog**: jesseduffield/lazygit@v0.51.1...v0.52.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC41MC4wIiwidXBkYXRlZEluVmVyIjoiNDAuNTAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
When refreshing the branches list, we have code to keep the same branch selected even when the refresh changes the sort order; this code remembers the selected branch before the refresh, and then tries to select it again afterwards (looking it up by name) if it is still there.
However, we stored the previously selected branch too early, before even obtaining the branches list; if the user moved the selection between that point and the end of the refresh, it would jump back. Fix this by remembering the previous selection only at the last moment, right before assigning the new branches slice.
We still have a race condition here between the UI code that manages the selection as the user presses arrow keys, and the background thread doing the refresh that reads and restores the selection; however, the race was there before, and we make it neither better nor worse with this PR. It doesn't seem to be a problem in practice.
Fixes #4116.
go generate ./...)