From 8d6da58bfa2b5e3e690803e8bd3ebb1ecabeec9e Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 29 Nov 2024 17:07:48 +0100 Subject: [PATCH] Add test to auto-amend a commit after pressing `e` on it Auto-amending is a little-known feature of git that is very convenient once you know it: whenever you stop at a commit marked with `edit` in an interactive rebase, you can make changes and stage them, and when you continue the rebase they automatically get amended to the commit you had stopped at. This is so convenient because making changes to a commit is one of the main reasons why you edit a commit. Unfortunately this currently doesn't work in lazygit because we don't actually use `edit` to stop at the first commit (instead, we add a `break` todo after it, which doesn't have the auto-amend functionality). We'll improve this later in this branch. --- .../interactive_rebase/edit_and_auto_amend.go | 58 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 59 insertions(+) create mode 100644 pkg/integration/tests/interactive_rebase/edit_and_auto_amend.go diff --git a/pkg/integration/tests/interactive_rebase/edit_and_auto_amend.go b/pkg/integration/tests/interactive_rebase/edit_and_auto_amend.go new file mode 100644 index 000000000..3171893ce --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/edit_and_auto_amend.go @@ -0,0 +1,58 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var EditAndAutoAmend = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Edit a commit, make a change and stage it, then continue the rebase to auto-amend the commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell. + CreateNCommits(3) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + NavigateToLine(Contains("commit 02")). + Press(keys.Universal.Edit). + Lines( + Contains("commit 03"), + MatchesRegexp("YOU ARE HERE.*commit 02").IsSelected(), + Contains("commit 01"), + ) + + t.Shell().CreateFile("fixup-file", "fixup content") + t.Views().Files(). + Focus(). + Press(keys.Files.RefreshFiles). + Lines( + Contains("??").Contains("fixup-file").IsSelected(), + ). + PressPrimaryAction() + + t.Common().ContinueRebase() + + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 03"), + Contains("commit 02").IsSelected(), + Contains("commit 01"), + ) + + t.Views().Main(). + /* EXPECTED: + Content(Contains("fixup content")) + ACTUAL: */ + Content(DoesNotContain("fixup content")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 82ba61afe..3a692804d 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -209,6 +209,7 @@ var tests = []*components.IntegrationTest{ interactive_rebase.DropCommitInCopiedBranchWithUpdateRef, interactive_rebase.DropTodoCommitWithUpdateRef, interactive_rebase.DropWithCustomCommentChar, + interactive_rebase.EditAndAutoAmend, interactive_rebase.EditFirstCommit, interactive_rebase.EditLastCommitOfStackedBranch, interactive_rebase.EditNonTodoCommitDuringRebase,