summaryrefslogtreecommitdiffstats
path: root/pkg
AgeCommit message (Collapse)Author
2024-03-11Internationalize the tooltips of the "Amend commit attributes" menuAbhishek Keshri
2024-03-09Add integration testStefan Haller
2024-03-09Remove hard line breaks when rewording commitsStefan Haller
... and when recalling a commit message from an old commit by pressing up-arrow. This is necessary because committing turns our soft line breaks into real ones, but when rewording we want to turn them back into soft ones again, so that it's possible to insert words at the beginning of a paragraph and have everything rewrap nicely. This is only a best effort; the algorithm only removes those hard line breaks that can be removed without changing the way the message looks. This works well when the previous commit message was wrapped at the same width, which for most users should be the most common case; but if it wasn't, the result is not great. Specifically, if the old wrap width was smaller, some hard line breaks just won't be removed; if it was wider though, you'll get an unpleasant comb effect with alternating long and short lines. In such a case it's best to switch to the editor and use whatever wrapping features you have there (e.g. alt-Q).
2024-03-09Replace DOS linefeeds with Unix line feeds when loading a commit messageStefan Haller
I have seen some commit messages that contain CRLF instead of just LF; I'm not sure if these were created by a broken git client, but they exist, so we need to deal with them. Editing them when rewording a commit sort of works, but is a little strange; the \r characters are invisble, so you need an extra arrow key press to skip over them. In the next commit we are going to add more logic related to line breaks, and it is getting confused by the \r, so it is becoming more important to fix this. The easiest fix is to normalize the line endings right after loading.
2024-03-09Save and restore the unwrapped descriptionStefan Haller
When preserving the commit message (when cancelling a commit), and later restoring it, use the unwrapped description.
2024-03-09Add config for soft-wrapping the commit message bodyStefan Haller
2024-03-09Keep the same line selected after squashing fixup commitsStefan Haller
This uses a bit of a heuristic that is hopefully correct most of the time.
2024-03-09Extract common code to a helper methodStefan Haller
This should arguably have been done in b133318b40 already; it's becoming more important now because we're going to extend the common code with more logic in the next commit.
2024-03-09Move selection down by one after creating a fixup commitStefan Haller
2024-03-09Extend squash_fixups_in_current_branch test to check the selectionStefan Haller
This shows a problem with the wrong commit being selected after squashing.
2024-03-09Add test for creating a fixup commit and squashing fixupsStefan Haller
We have such a test already (squash_fixups_above_first_commit.go), but it can't be used for what we want to check here, because it uses the first commit, and we can't move down from there. So create a new one that basically does the same thing, but for a commit in the middle. The focus of this new test is to check how the selection behaves; as you can see, there is a problem both when creating a fixup and when squashing fixups. We'll address these separately in the next commits.
2024-03-09Support setting a range of commits to "edit" outside of a rebaseStefan Haller
It starts a rebase on the bottom-most commit of the range, and sets all the selected commits to "edit" (skipping merge commits, because they can't be edited).
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-06Don't strike out reserved keys in menusStefan Haller
It seems to cause more confusion than it helps.
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-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 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"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 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 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-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-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-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-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-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-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 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.
2024-02-16Simplify saving app stateStefan Haller
2024-02-16Redraw commits view when showGraph setting changesStefan Haller
2024-02-16Deprecate git.log.showGraph and git.log.order configAlex March
Added identical properties to AppState that should eventually have their defaults set.
2024-02-16Avoid crash when hitting enter on an update-ref todoStefan Haller
2024-02-16Fix a problem with refreshing while an update-ref todo is selectedStefan Haller
Scenario: - show the files of a commit, escape out of it again - start an interactive rebase of a stack of branches, with the rebase.updateRefs git config set to true - select one of the update-ref todos - trigger a refresh (either manually or by bringing lazygit's terminal window to the front) This results in an error message "fatal: ambiguous argument '': unknown revision or path not in the working tree." Fix this by putting another band-aid on the check for the commit files refresh. This is the easiest way to fix the problem, but I don't think it's the best one. We shouldn't be refreshing the commit files context at all if it isn't visible, because it's pointless; there's no way to switch to it again except by calling viewFiles again with a specific ref. But I'm too lazy too figure out how to do that right now.
2024-02-13Fix range select bugAaron Hoffman
After discarding file changes from the commit, the was still referencing these indexes as being part of the range select. The consequence was needing to hit escape twice to exit commit files in some situations. Canceling the range select after discarding changes fixes that.
2024-02-13Clean up test caseAaron Hoffman
I'm combining the delete single file case from `discard_old_file_change` with the content of `discard_range_select` and calling that `discard_old_file_changes`. Hopefully that cleans things up a little bit. This also adds a check that the custom patch is getting reset properly.
2024-02-13CleanupAaron Hoffman
The waiting status shouldn't happen until after the user has responded to the popup. Since we're not giving a standalone prompt about clearing the patch, all of the business in `discard` doesn't need to be in a function any more
2024-02-13Support range select removing files from a commitAaron Hoffman
2024-02-13Change default of git.log.showGraph to 'always'Stefan Haller
Most people seem to prefer it to be on.