summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2024-03-09Local-ise remote branches when checking out by namecheckout-by-nameJesse Duffield
The idea here is that in the git CLI you will often want to checkout a remote branch like origin/blah by doing `git checkout blah`. That will automatically create a local branch named blah that tracks origin/blah. Previously in the suggestions view when checking out a branch by name, we would only show local branches and remote branches like origin/blah but wouldn't show blah as an option (assuming no local branch existed with that name). This meant users would checkout origin/blah and git would check out that branch as a detached head which is rarely what you actually want. Now we give them both options. The alternative approach we could have taken is to still show the branch as origin/blah but then ask if the user wants to check out the branch as detached or as a local branch tracking the remote branch. That approach is certainly more versatile, but it's also something you can do already by going to the remote branch directly via the remotes view. Admittedly, my approach involves less work.
2024-03-07Show all submodules recursively (#3341)Stefan Haller
- **PR Description** Extend the submodules tab to show not only the top-level submodules, but also their nested submodules, recursively. Fixes #3306.
2024-03-07Show all submodules recursivelyStefan Haller
2024-03-07Pass entire submodule to UpdateUrl instead of name and path separatelyStefan Haller
This will make the next commit slightly simpler.
2024-03-07Fix deleting submodule where name and path are differentStefan Haller
2024-03-07Add test to check that the git dir for a deleted submodule was removedStefan Haller
The test shows that it actually doesn't work when the submodule name is different from its path. We'll fix this in the next commit.
2024-03-07Extend submodule tests to use a submodule where name and path are differentStefan Haller
In most real-world scenarios, name and path are usually the same. They don't have to be though, and it's important to make sure we use the right one when passing arguments to git commands, so change the tests to have different name and path.
2024-03-07Don't strike out reserved keys in menus (#3365)Stefan Haller
It seems to cause more confusion than it helps. Fixes #2819.
2024-03-06Don't strike out reserved keys in menusStefan Haller
It seems to cause more confusion than it helps.
2024-03-03Bump gocui (#3356)Stefan Haller
This resolves the regression from the last gocui bump that strikethrough no longer worked. Fixes #3355.
2024-03-03Bump gocuiStefan Haller
This resolves the regression from the last gocui bump that strikethrough no longer worked.
2024-03-02Remove support for old style non-interactive rebase (#3348)Stefan Haller
When doing a non-interactive rebase using a version of git earlier than 2.26, or by explicitly calling `git -c rebase.backend=apply rebase`, lazygit can display the pending todos by parsing the numbered patch files in `.git/rebase-apply/`. Unfortunately, support for this has been broken for more than three years because of the change in 682db77401e (the string literal "normal" should have been changed to REBASE_MODE_NORMAL instead of REBASE_MODE_MERGING). It's not an important bug since you can only get into this situation by doing a rebase outside of lazygit, and then only with a pretty old git version or by using very uncommon git options. So instead of fixing the bug, just remove the code.
2024-03-02Remove support for old-style non-interactive rebasesStefan Haller
When doing a non-interactive rebase using a version of git earlier than 2.26, or by explicitly calling `git -c rebase.backend=apply rebase`, lazygit can display the pending todos by parsing the numbered patch files in `.git/rebase-apply/`. Unfortunately, support for this has been broken for more than three years because of the change in 682db77401e (the string literal "normal" should have been changed to REBASE_MODE_NORMAL instead of REBASE_MODE_MERGING). It's not an important bug since you can only get into this situation by doing a rebase outside of lazygit, and then only with a pretty old git version or by using very uncommon git options. So instead of fixing the bug, just remove the code.
2024-03-02Allow more than one argument in git.merging.args config (#3336)Stefan Haller
- **PR Description** Fix a bug where merging would fail with an error message when you try to put more than one argument in the `git.merging.args` config. This broke with 25f8b0337e. Fixes #3334.
2024-03-02Break git.merging.args config into separate arguments on whitespaceStefan Haller
This makes it possible again to pass multiple arguments, for example "--ff-only --autostash". This won't work correctly if you want to use an argument that contains a space, but it's very unlikely that people will want to do that, so I think this is good enough.
2024-03-02Add a test that demonstrates a bug with multiple args in git.merging.args configStefan Haller
We are currently passing the whole string as a single argument, which doesn't work of course.
2024-03-02Don't show branch head on rebase todos if the rebase.updateRefs config is on ↵Stefan Haller
(#3340) - **PR Description** When doing an interactive rebase of a stack of branches with the `rebase.updateRefs` git config set to true, you get `update-ref` todos between the "pick" items. In this situation we would still show the branch head icon for each pick item that used to be the head of a branch. This is confusing, especially when you want to move a new commit to the head of a branch in the middle of the stack. Consider the following scenario: <img width="410" alt="image" src="https://github.com/jesseduffield/lazygit/assets/1225667/438b7157-e51e-48fb-95a9-b67039a7ad30"> Here we have made a new commit at the top of the stack, entered interactive rebase, and moved the commit down to the head of the second branch. Now it sits between the commit that shows the branch icon of the second branch, and the update-ref item for the second branch. This is super confusing, and it's simply better to not show branch icons for pick entries. That's what this PR does. We do show the icons if the `rebase.updateRefs` config is off, because otherwise there would be no indication of where the branches start and end. Of course, changing anything in this case will destroy the stack, so maybe it would be better to hide the icons in this case too to make this more obvious. I'm unsure about that.
2024-03-02Don't show branch head on rebase todos if the rebase.updateRefs config is onStefan Haller
The additional branch head icon is more confusing than useful in this situation. The update-ref entries show very clearly where the branch heads will go when continuing the rebase; the information where the branch heads used to be before the rebase is not really needed here, and just makes the display more confusing. I'm not adding more tests here because the changes to the existing tests demonstrate the change clearly enough.
2024-03-02Rename showBranchMarkerForHeadCommit parameter to hasRebaseUpdateRefsConfigStefan Haller
Name it after what it is rather than what it is used for. In the next commit we will use it for another condition.
2024-03-02Add test demonstrating the current (undesired) behaviorStefan Haller
2024-03-02Provide two helix presets, one for "helix" and one for "hx" (#3346)Stefan Haller
The helix binary seems to be called "helix" on some distributions (e.g. Arch), but "hx" on others (e.g. Fedora). Provide presets for both, so that auto-detection from $EDITOR works. See https://github.com/jesseduffield/lazygit/issues/2624#issuecomment-1966509979.
2024-03-02Provide two helix presets, one for "helix" and one for "hx"Stefan Haller
The helix binary seems to be called "helix" on some distributions (e.g. Arch), but "hx" on others (e.g. Fedora). Provide presets for both, so that auto-detection from $EDITOR works.
2024-03-02Make ctrl-f available in staging view (#3349)Stefan Haller
- **PR Description** A common workflow for me is to create a fixup commit from only some of my current changes; to do that, I enter a file, stage a few hunks, and then want to invoke ctrl-f to find the base commit for these changes. Currently I need to esc back to the files panel in order to do that; it's more convenient to be able to do this right from the staging panel. Labelled as "ignore-for-release" because the ctrl-f feature has only been added after the last release, so no release notes needed for this change.
2024-03-02Make ctrl-f available in staging viewStefan Haller
A common workflow for me is to create a fixup commit from only some of my current changes; to do that, I enter a file, stage a few hunks, and then want to invoke ctrl-f to find the base commit for these changes. Currently I need to esc back to the files panel in order to do that; it's more convenient to be able to do this right from the staging panel.
2024-03-02Fix linter warnings (#3351)Stefan Haller
These started to pop up in my editor after I installed an update of gopls, I think.
2024-03-02Fix linter warningsStefan Haller
These started to pop up in my editor after I installed an update of gopls, I think. It's unfortunate that we don't see them on CI.
2024-03-02Fix display of Chinese characters on Windows (#3352)Stefan Haller
Bump our gocui dependency, which in turn bumps tcell to v2.7.1, which should fix problems with multibyte characters on Windows. Fixes #2741.
2024-03-01Bump gocuiStefan Haller
The main change here is to bump tcell to v2.7.1, which should fix problems with multibyte characters on Windows.
2024-02-21Add author filtering to commit view (#3302)Stefan Haller
- **PR Description** This PR introduces a new feature to the commit view, allowing users to filter commits based on the author's name or email address. Similar to the existing path filtering functionality, accessible through `<c-s>`, this feature allows users to filter the commit history by the currently selected commit's author if the commit view is focused, or by typing in the author's name or email address. This feature adds an entry to the filtering menu, to provide users with a familiar and intuitive experience ![filter-by-author](https://github.com/jesseduffield/lazygit/assets/3098462/5b00a716-e432-4204-8568-0e93b1411bc7) - **Please check if the PR fulfils these requirements** * [x] Cheatsheets are up-to-date (run `go generate ./...`) * [x] Code has been formatted (see [here](https://github.com/jesseduffield/lazygit/blob/master/CONTRIBUTING.md#code-formatting)) * [x] Tests have been added/updated (see [here](https://github.com/jesseduffield/lazygit/blob/master/pkg/integration/README.md) for the integration test guide) * [x] Text is internationalised (see [here](https://github.com/jesseduffield/lazygit/blob/master/CONTRIBUTING.md#internationalisation)) * [x] Docs (specifically `docs/Config.md`) have been updated if necessary * [x] You've read through your own file changes for silly mistakes etc
2024-02-21Add author filtering to commit viewTristan Déplantes
This commit introduces a new feature to the commit view, allowing users to filter commits based on the author's name or email address. Similar to the existing path filtering functionality, accessible through <c-s>, this feature allows users to filter the commit history by the currently selected commit's author if the commit view is focused, or by typing in the author's name or email address. This feature adds an entry to the filtering menu, to provide users with a familiar and intuitive experience
2024-02-21Change "git reset" default to --mixed (#3264)Stefan Haller
Calling "git reset" on the command line (without further arguments) defaults to --mixed, which is reason enough to make it the default for us, too. But I also find myself using --mixed more often than --soft. The main use case for me is that I made a bunch of WIP commits, and want to turn them into real commits when I'm done hacking. I select the last commit before the WIP commits and reset to it, leaving all changes of all those commits in the working directory. Since I want to start staging things from there, I prefer those modifications to be unstaged at that point, which is what --mixed does.
2024-02-21Add tooltips for reset menu itemsStefan Haller
2024-02-21Change "git reset" default to --mixedStefan Haller
Calling "git reset" on the command line (without further arguments) defaults to --mixed, which is reason enough to make it the default for us, too. But I also find myself using --mixed more often than --soft. The main use case for me is that I made a bunch of WIP commits, and want to turn them into real commits when I'm done hacking. I select the last commit before the WIP commits and reset to it, leaving all changes of all those commits in the working directory. Since I want to start staging things from there, I prefer those modifications to be unstaged at that point, which is what --mixed does.
2024-02-18Use $XDG_STATE_HOME for state.yml (#2936)Stefan Haller
- **PR Description** fixes #2856, #2794, #818
2024-02-18Update Config.mdStefan Haller
2024-02-18Change log path to state dirChing Pei Yang
2024-02-18Use $XDG_STATE_DIR for state.ymlChing Pei Yang
2024-02-18Switch to github.com/adrg/xdgChing Pei Yang
2024-02-18Fix some problems with patches if `git diff` was customized with config ↵Stefan Haller
(e.g. `external` or `noprefix`). (#3222) - **PR Description** I encountered the problem that I couldn't extract changes into a new commit because I had difftastic as an external git tool configured. Add `diff.noprefix=false` config Option and also specify `--no-ext-diff` when doing the `git diff` after applying a patch. This fixes #3107. Though, there might be other config options that can cause problems, but fixing these common cases should be an improvement nevertheless.
2024-02-18Add integration testStefan Haller
The test would fail without the fixes in the previous commits; even if only one of the configs is set.
2024-02-18Set diff.noprefix=false for all other diff commands tooStefan Haller
This fixes problems with being able to stage things in a custom patch correctly.
2024-02-18Fix problems with patches if `git diff` was customized with config.Matthias Richerzhagen
2024-02-16Keep sort order when filtering lists sorted by date (#3282)Stefan Haller
- **PR Description** Keep the sort order stable when filtering lists of things sorted by date (branches, stashes, reflog entries).
2024-02-16Don't omit section headers when filtering the keybindings menuStefan Haller
2024-02-16Optionally keep sort order stable when filtering listsStefan Haller
For some lists it is useful to keep the same sort order when filtering (rather than sorting by best match like we usually do). Add an optional function to FilteredList to make this possible, and use it whenever we show lists of things sorted by date (branches, stashes, reflog entries), as well as menu items because this allows us to keep the section headers in the keybindings menu, which is useful for understanding what you are looking at when filtering.
2024-02-16Bump required go version to 1.21Stefan Haller
We'll need this to use the slices.Sort function in the next commit. It would also be possible to use sort.Ints instead, but it's slower.
2024-02-16Fix initial scroll bar size again (#3285)Stefan Haller
After #3283 we need to read more lines initially so that the scrollbar goes to its minimal height of 1 for long diffs. Without this, it would start with a height of 2 and then become smaller after you scroll down half the window height. It does mean that we need to read twice the number of lines initially (up to the limit of 5000). I think it's worth it, I find the incorrect initial size confusing.
2024-02-16Fix number of lines to read from a task initially for the right scroll bar sizeStefan Haller
After #3283 we need to read more lines initially so that the scrollbar goes to its minimal height of 1 for long diffs. Without this, it would start with a height of 2 and then become smaller after you scroll down half the window height.
2024-02-16Fix order of custom commands history (#3286)Stefan Haller
- **PR Description** Fix order problems when saving custom commands history This fixes two problems: - each time the custom commands panel was opened, the history of commands would be shown in reversed order compared to last time. (The reason is that lo.Reverse modifies the slice in place rather than just returning a new, reversed slice.) - when executing a previous command again (either by typing it in again, or by picking it from the history), it should move to the beginning of the history, but didn't. We fix this by storing the history in reversed order (as the user sees it in the panel), this makes the logic simpler. We just have to prepend rather than append newly added commands now. While this is theoretically a breaking change, it's not worth bothering because the order was wrong for existing users in 50% of the cases anyway.
2024-02-16Fix order problems when saving custom commands historyStefan Haller
This fixes two problems: - each time the custom commands panel was opened, the history of commands would be shown in reversed order compared to last time. (The reason is that lo.Reverse modifies the slice in place rather than just returning a new, reversed slice.) - when executing a previous command again (either by typing it in again, or by picking it from the history), it should move to the beginning of the history, but didn't. We fix this by storing the history in reversed order (as the user sees it in the panel), this makes the logic simpler. We just have to prepend rather than append newly added commands now. While this is theoretically a breaking change, it's not worth bothering because the order was wrong for existing users in 50% of the cases anyway.