jesseduffield.lazygit/pkg/integration/tests/interactive_rebase/fixup_keep_message_rebase.go
Jesse Duffield f317a97ac1 Support using the selected commit's message in a fixup
I've optimised for muscle memory backwards compatibility here:
  - Outside interactive rebase: press 'f' then instead of a confirmation
panel, a menu appears where you can choose to keep the selected commit's
message
  - Inside interactive rebase: press 'f' then press 'c' to see the menu
for keeping the message, where if you press 'c' again it will retain the
current message. so 'fcc' is the chord to press.

We're also now showing the -C flag (which is what enables the behaviour)
against the todo.

I've picked the 'c' keybinding because 'C' was taken and it corresponds
to the flag. Previously that showed a warning about a change in
keybinding for cherry picking but it's been ages since we've made that
change so I'm happy to retire it.
2026-01-28 10:28:52 +01:00

79 lines
2.4 KiB
Go

package interactive_rebase
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var FixupKeepMessageRebase = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Set fixup -C flag on a fixup commit during interactive rebase",
ExtraCmdArgs: []string{},
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.
CreateFileAndAdd("file1.txt", "File1 Content\n").Commit("First Commit").
CreateFileAndAdd("file2.txt", "File2 Content\n").Commit("Second Commit").
CreateFileAndAdd("file3.txt", "File3 Content\n").Commit("Third Commit")
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().
Focus().
Lines(
Contains("Third Commit"),
Contains("Second Commit"),
Contains("First Commit"),
).
// Start interactive rebase from the first commit
NavigateToLine(Contains("First Commit")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick CI Third Commit"),
Contains("pick CI Second Commit"),
Contains("--- Commits ---"),
Contains("First Commit").IsSelected(),
).
// Mark second commit as fixup
NavigateToLine(Contains("Second Commit")).
Press(keys.Commits.MarkCommitAsFixup).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick CI Third Commit"),
Contains("fixup CI Second Commit").IsSelected(),
Contains("--- Commits ---"),
Contains("First Commit"),
).
// Now set the -C flag using the SetFixupMessage keybinding
Press(keys.Commits.SetFixupMessage).
Tap(func() {
t.ExpectPopup().Menu().
Title(Equals("Set fixup message")).
Select(Contains("use this commit's message")).
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick CI Third Commit"),
Contains("fixup -C CI Second Commit").IsSelected(),
Contains("--- Commits ---"),
Contains("First Commit"),
).
// Continue the rebase
Tap(func() {
t.Common().ContinueRebase()
}).
Lines(
Contains("Third Commit"),
Contains("Second Commit").IsSelected(),
)
t.Views().Main().
// The resulting commit should have the message from the fixup commit
Content(Contains("Second Commit")).
Content(DoesNotContain("First Commit")).
Content(Contains("+File1 Content")).
Content(Contains("+File2 Content"))
},
})