summaryrefslogtreecommitdiffstats
path: root/pkg
AgeCommit message (Collapse)Author
2024-06-23Use utils.StringWidth to optimize rendering performanceStefan Haller
runewidth.StringWidth is an expensive call, even if the input string is pure ASCII. Improve this by providing a wrapper that short-circuits the call to len if the input is ASCII. Benchmark results show that for non-ASCII strings it makes no noticable difference, but for ASCII strings it provides a more than 200x speedup. BenchmarkStringWidthAsciiOriginal-10 718135 1637 ns/op BenchmarkStringWidthAsciiOptimized-10 159197538 7.545 ns/op BenchmarkStringWidthNonAsciiOriginal-10 486290 2391 ns/op BenchmarkStringWidthNonAsciiOptimized-10 502286 2383 ns/op
2024-06-23Rerender fewer views when their width changesStefan Haller
In d5b4f7bb3e and 58a83b0862 we introduced a combined mechanism for rerendering views when either their width changes (needed for the branches view which truncates long branch names), or the screen mode (needed for those views that display more information in half or full screen mode, e.g. the commits view). This was a bad idea, because it unnecessarily rerenders too many views when just their width changes, which causes a noticable lag. This is a problem, for example, when selecting a file in the files panel that has only unstaged changes, and then going to one that has both staged and unstaged changes; this splits the main view, causing the side panels to become a bit narrower, and rerendering all those views took almost 500ms on my machine. Another similar example is entering or leaving staging mode. Fix this by being more specific about which views need rerendering under what conditions; this improves the time it takes to rerender in the above scenarios from 450-500s down to about 20ms. This reintroduces the code that was removed in 58a83b0862, but in a slightly different way.
2024-06-23Don't redraw remote branches view when its width changesStefan Haller
The rendering of remote branches is in no way dependent on the width of the view (or the screen mode). Unlike in the local branches view, we don't truncate long branch names here (because there's no more information after them). This is an error introduced in d5b4f7bb3e.
2024-06-23Show radio buttons in the show log graph and commit sort order menusStefan Haller
2024-06-23Show radio buttons in the sort order menu for branchesStefan Haller
2024-06-23Support showing checkboxes or radio buttons in menusStefan Haller
For checkboxes it probably doesn't really make sense to use them yet, because we'd have to find a way how you can toggle them without closing the dialog; but we already provide rendering for them to lay the ground. But radio buttons can be used already, because for those it is ok to close the dialog when choosing a different option (as long as there is only one grounp of radio buttons in the panel, that is).
2024-06-23Always show the "Discard unchanged changes" menu itemStefan Haller
Strike it through if not applicable. This will hopefully help with confusion about the meaning of "all" in the "Discard all changes" entry; some people misunderstand this to mean all changes in the working copy. Seeing the "Discard unstaged changes" item next to it hopefully makes it clearer that "all" is meant in contrast to that.
2024-06-23Fix custom patch operations on added filesStefan Haller
Several custom patch commands on parts of an added file would fail with the confusing error message "error: new file XXX depends on old contents". These were dropping the custom patch from the original commit, moving the patch to a new commit, moving it to a later commit, or moving it to the index. We fix this by converting the patch header from an added file to a diff against an empty file. We do this not just for the purpose of applying the patch, but also for rendering it and copying it to the clip board. I'm not sure it matters much in these cases, but it does feel more correct for a filtered patch to be presented this way.
2024-06-23Introduce options struct for RenderPatchForFileStefan Haller
We're going to add another argument in the next commit, and that's getting a bit much, especially when most of the arguments are bool and you only see true and false at the call sites without knowing what they mean.
2024-06-23Add test for moving a patch from an added file to an earlier commitStefan Haller
This currently works (albeit with a bit of manual work, as the user needs to resolve conflicts), and we add this test just to make sure that we don't break it with the following change.
2024-06-23Add test for moving a patch from a deleted file to a new commitStefan Haller
This currently works, we add it as a regression test to make sure we don't break it. It is an interesting test because it turns the deletion of the file in the moved-from commit into a modification.
2024-06-23Remove unneccesary test actionsStefan Haller
Pressing enter in the patch building view does nothing.
2024-06-23Run PTY tasks after layout so that they get the correct view sizeStefan Haller
This is important when using a pager that draws a horizontal line across the entire width of the view; when changing from a file or directory that has only unstaged (or only staged) changes to one that has both, the main view is split in half, but the PTY task would be run on the view in its old state, so the horizonal line would be too long and wrap around.
2024-06-23Fix possible off-by-one error wrt PTY sizeStefan Haller
All PTYs were created with the size of the main view, on the assumption that main and secondary always have the same size. That's not true though; in horizontal split mode, the width of the two views can differ by one because of rounding, and when using a pager that draws a horizontal line across the width of the view, this is visible and looks very ugly.
2024-06-23Add prompt to the remote branch checkout menuStefan Haller
2024-06-23Add menu promptStefan Haller
This makes it possible to add a prompt to a menu. It will be shown above the menu items, separated from them by a blank line.
2024-06-23Extract function wrapMessageToWidthStefan Haller
This steals even more code from `gocui.lineWrap`. We'll make use of this in the next commit.
2024-06-23Clear keybinding functions in resetHelpersAndControllersStefan Haller
When switching to a repo that was open before, the context tree is reused, so before adding keybinding functions to those contexts again, we need to clear the old ones.
2024-06-23Add a test demonstrating the bugStefan Haller
After switching to another repo and then back to the original one, all keybinding suggestions in the status bar are shown twice.
2024-06-23Fix truncation of long branch names containing non-ASCII charactersStefan Haller
2024-06-23Add test demonstrating wrong truncation of branch names containing non-ASCII ↵Stefan Haller
characters
2024-06-23Use actual ellipsis character instead of ... to truncate stringsStefan Haller
Space is scarce in lazygit's UI, and using ... wastes a lot of it.
2024-06-23Render the view when scrolling with the wheelStefan Haller
2024-06-23Only render visible portion of the screen for commits viewStefan Haller
2024-06-23Simplify ListContextTrait.FocusLineStefan Haller
When refreshViewportOnChange is true, we would refresh the viewport once at the end of FocusLine, and then we would check at the end of AfterLayout if the origin has changed, and refresh again if so. That's unnecessarily complicated, let's just unconditionally refresh at the end of AfterLayout only.
2024-06-23Log memory usage every 10sStefan Haller
2024-06-23Use model searching in commits (and sub-commits) viewStefan Haller
2024-06-23Assert that the search status view is visibleStefan Haller
Just to be really sure that it not only contains the expected status text, but also actually shows it.
2024-06-23Add type assertions for all searchable contextsStefan Haller
We want to add an additional method to ISearchableContext later in this branch, and this will make sure that we don't forget to implement it in any concrete context.
2024-06-23Cleanup: remove outdated commentStefan Haller
We do show the graph in the left/right view, as of b7673577a2.
2024-06-23Fix searching in the divergence (left/right) viewStefan Haller
Searching in the "Divergence from upstream" view would select the wrong lines. The OnSearchSelect function gets passed a view index, and uses it to select a model line. In most views these are the same, but not in the divergence view (because of the Remote/Local section headers).
2024-06-23Cleanup: reduce some code duplicationStefan Haller
ListContextTrait.OnSearchSelect was introduced in 138be04e65, but it was never called. I can only guess that a planned refactoring wasn't finished here.
2024-06-15Add user config gui.commitAuthorFormatanikiforov
2024-06-14Fix reporting of unexpected selections in integration testsStefan Haller
Expected and actual selection were swapped in the error message.
2024-06-12Suspend lazygit when continuing a rebase with exec todosStefan Haller
It's likely that the exec todos are some kind of lengthy build task whose output the user will want to see in the terminal.
2024-06-12Show "exec" todos in the list of rebase todosStefan Haller
Unfortunately it isn't possible to delete them. This would often be useful, but our todo rewriting mechanisms rely on being able to find todos by some identifier (hash for pick, ref for update-ref), and exec todos don't have a unique identifier.
2024-06-10Disregard master commits when finding base commit for fixupStefan Haller
If exactly one candidate from inside the current branch is found, we return that one even if there are also hunks belonging to master commits; we disregard those in this case.
2024-06-10Don't reference Model().Commits multiple timesStefan Haller
Copy the slice into a variable and use that throughout the whole operation; this makes us a little more robust against the model refreshing concurrently.
2024-06-10Add test demonstrating the desired behaviorStefan Haller
It has two modified hunks, one for a master commit and one for a branch commit. Currently we get an error mentioning those two commits, but we would like to silently select the branch commit.
2024-06-07feat: support range selection for commit attributes amendAzraelSec
2024-06-07feat: let the staging secondary panel change view modeAzraelSec
2024-06-07fix: typo in `IsVisible` assertion stringAzraelSec
2024-06-05Include demos when running integration tests with go testStefan Haller
2024-06-05Don't wait in integration tests when running in headless modeStefan Haller
There's no point in spending time waiting in this case, as nobody can see it.
2024-06-05fix: update rebase_onto demo test to match new rebase menu titleAzraelSec
2024-06-03Add -profile command line flagStefan Haller
When on, start a built-in web server that takes requests on port 6060 to gather profiling data.
2024-06-03Add command "Rebase onto base branch" to rebase menuStefan Haller
2024-06-03Remove target branch from title of rebase menuStefan Haller
Put it into the individual menu items instead. Again, this is necessary because we are going to add another entry to the menu that is independent of the selected branch.
2024-06-03Always show rebase menu, even when rebasing is not possibleStefan Haller
Instead, disable the individual entries in the menu. This is necessary because we are going to add another entry to the menu that is independent of the selected branch.
2024-06-03Make "Rebase" show up with "..." in the keybindings menuStefan Haller