1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-05-19 22:33:16 +02:00

Fix order of custom commands history (#3286)

- **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.
This commit is contained in:
Stefan Haller 2024-02-16 13:46:04 +01:00 committed by GitHub
commit 1081c45397
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 64 additions and 7 deletions

View File

@ -20,15 +20,12 @@ func (self *CustomCommandAction) Call() error {
HandleConfirm: func(command string) error { HandleConfirm: func(command string) error {
if self.shouldSaveCommand(command) { if self.shouldSaveCommand(command) {
self.c.GetAppState().CustomCommandsHistory = utils.Limit( self.c.GetAppState().CustomCommandsHistory = utils.Limit(
lo.Uniq(append(self.c.GetAppState().CustomCommandsHistory, command)), lo.Uniq(append([]string{command}, self.c.GetAppState().CustomCommandsHistory...)),
1000, 1000,
) )
} }
err := self.c.SaveAppState() self.c.SaveAppStateAndLogError()
if err != nil {
self.c.Log.Error(err)
}
self.c.LogAction(self.c.Tr.Actions.CustomCommand) self.c.LogAction(self.c.Tr.Actions.CustomCommand)
return self.c.RunSubprocessAndRefresh( return self.c.RunSubprocessAndRefresh(
@ -39,8 +36,7 @@ func (self *CustomCommandAction) Call() error {
} }
func (self *CustomCommandAction) GetCustomCommandsHistorySuggestionsFunc() func(string) []*types.Suggestion { func (self *CustomCommandAction) GetCustomCommandsHistorySuggestionsFunc() func(string) []*types.Suggestion {
// reversing so that we display the latest command first history := self.c.GetAppState().CustomCommandsHistory
history := lo.Reverse(self.c.GetAppState().CustomCommandsHistory)
return helpers.FuzzySearchFunc(history) return helpers.FuzzySearchFunc(history)
} }

View File

@ -0,0 +1,60 @@
package custom_commands
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var History = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Test that the custom commands history is saved correctly",
ExtraCmdArgs: []string{},
Skip: false,
SetupRepo: func(shell *Shell) {},
SetupConfig: func(cfg *config.AppConfig) {},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.GlobalPress(keys.Universal.ExecuteCustomCommand)
t.ExpectPopup().Prompt().
Title(Equals("Custom command:")).
Type("echo 1").
Confirm()
t.GlobalPress(keys.Universal.ExecuteCustomCommand)
t.ExpectPopup().Prompt().
Title(Equals("Custom command:")).
SuggestionLines(Contains("1")).
Type("echo 2").
Confirm()
t.GlobalPress(keys.Universal.ExecuteCustomCommand)
t.ExpectPopup().Prompt().
Title(Equals("Custom command:")).
SuggestionLines(
// "echo 2" was typed last, so it should come first
Contains("2"),
Contains("1"),
).
Type("echo 3").
Confirm()
t.GlobalPress(keys.Universal.ExecuteCustomCommand)
t.ExpectPopup().Prompt().
Title(Equals("Custom command:")).
SuggestionLines(
Contains("3"),
Contains("2"),
Contains("1"),
).
Type("echo 1").
Confirm()
// Executing a command again should move it to the front:
t.GlobalPress(keys.Universal.ExecuteCustomCommand)
t.ExpectPopup().Prompt().
Title(Equals("Custom command:")).
SuggestionLines(
Contains("1"),
Contains("3"),
Contains("2"),
)
},
})

View File

@ -98,6 +98,7 @@ var tests = []*components.IntegrationTest{
custom_commands.CheckForConflicts, custom_commands.CheckForConflicts,
custom_commands.ComplexCmdAtRuntime, custom_commands.ComplexCmdAtRuntime,
custom_commands.FormPrompts, custom_commands.FormPrompts,
custom_commands.History,
custom_commands.MenuFromCommand, custom_commands.MenuFromCommand,
custom_commands.MenuFromCommandsOutput, custom_commands.MenuFromCommandsOutput,
custom_commands.MultiplePrompts, custom_commands.MultiplePrompts,