diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go index 6595b1e87..5f7fef350 100644 --- a/pkg/integration/components/shell.go +++ b/pkg/integration/components/shell.go @@ -64,7 +64,7 @@ func (s *Shell) Checkout(name string) *Shell { } func (s *Shell) Merge(name string) *Shell { - return s.RunCommand("git merge --commit " + name) + return s.RunCommand("git merge --commit --no-ff " + name) } func (s *Shell) GitAdd(path string) *Shell { diff --git a/pkg/integration/tests/interactive_rebase/amend_merge.go b/pkg/integration/tests/interactive_rebase/amend_merge.go new file mode 100644 index 000000000..d1b295cff --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/amend_merge.go @@ -0,0 +1,37 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var AmendMerge = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Amends a staged file to a merge commit.", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell. + NewBranch("development-branch"). + CreateFileAndAdd("initial-file", "content"). + Commit("initial commit"). + NewBranch("feature-branch"). // it's also checked out automatically + CreateFileAndAdd("new-feature-file", "new content"). + Commit("new feature commit"). + CheckoutBranch("development-branch"). + Merge("feature-branch"). + CreateFileAndAdd("post-merge-file", "content") + }, + Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) { + assert.CommitCount(3) + + input.SwitchToCommitsWindow() + assert.CurrentViewName("commits") + + input.PressKeys(keys.Commits.AmendToCommit) + input.PressKeys(keys.Universal.Return) + + assert.MatchHeadCommitMessage(Contains("Merge")) + assert.CommitCount(3) + }, +}) diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go index eb2fd83fa..d59177c7e 100644 --- a/pkg/integration/tests/tests.go +++ b/pkg/integration/tests/tests.go @@ -29,6 +29,7 @@ var tests = []*components.IntegrationTest{ branch.Rebase, branch.RebaseAndDrop, interactive_rebase.One, + interactive_rebase.AmendMerge, custom_commands.Basic, custom_commands.MultiplePrompts, custom_commands.MenuFromCommand, diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG new file mode 100644 index 000000000..857a5998b --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG @@ -0,0 +1 @@ +new feature commit diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/FETCH_HEAD new file mode 100644 index 000000000..e69de29bb diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD new file mode 100644 index 000000000..dbe0904e2 --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD @@ -0,0 +1 @@ +ref: refs/heads/development-branch diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD new file mode 100644 index 000000000..6b03146bc --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD @@ -0,0 +1 @@ +a69464e3729a09e3a526d4a2db209ee43e64ba1c diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config new file mode 100644 index 000000000..8a266ea88 --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config @@ -0,0 +1,10 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[user] + email = CI@example.com + name = CI +[commit] + gpgSign = false diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description new file mode 100644 index 000000000..498b267a8 --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index new file mode 100644 index 000000000..02e2692f4 Binary files /dev/null and b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index differ diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude new file mode 100644 index 000000000..a5196d1be --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD new file mode 100644 index 000000000..8f516843a --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD @@ -0,0 +1,5 @@ +0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI 1662823399 +0200 commit (initial): initial commit +a69464e3729a09e3a526d4a2db209ee43e64ba1c a69464e3729a09e3a526d4a2db209ee43e64ba1c CI 1662823399 +0200 checkout: moving from development-branch to feature-branch +a69464e3729a09e3a526d4a2db209ee43e64ba1c 5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f CI 1662823399 +0200 commit: new feature commit +5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f a69464e3729a09e3a526d4a2db209ee43e64ba1c CI 1662823399 +0200 checkout: moving from feature-branch to development-branch +a69464e3729a09e3a526d4a2db209ee43e64ba1c 77e1bb1effc5857c4d701219a001823432e3586d CI 1662823399 +0200 merge feature-branch: Merge made by the 'ort' strategy. diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch new file mode 100644 index 000000000..e191d45d0 --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI 1662823399 +0200 commit (initial): initial commit +a69464e3729a09e3a526d4a2db209ee43e64ba1c 77e1bb1effc5857c4d701219a001823432e3586d CI 1662823399 +0200 merge feature-branch: Merge made by the 'ort' strategy. diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch new file mode 100644 index 000000000..0825e687b --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI 1662823399 +0200 branch: Created from HEAD +a69464e3729a09e3a526d4a2db209ee43e64ba1c 5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f CI 1662823399 +0200 commit: new feature commit diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d new file mode 100644 index 000000000..3b87e3896 Binary files /dev/null and b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d differ diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/47/d2739ba2c34690248c8f91b84bb54e8936899a b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/47/d2739ba2c34690248c8f91b84bb54e8936899a new file mode 100644 index 000000000..c416a87e0 Binary files /dev/null and b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/47/d2739ba2c34690248c8f91b84bb54e8936899a differ diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57 new file mode 100644 index 000000000..4ac136337 Binary files /dev/null and b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57 differ diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f new file mode 100644 index 000000000..7d41ab0db --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f @@ -0,0 +1,2 @@ +xK +@])z/HgɀUљA|WTK4= קYR-1 lR469V02A|#8[-:qc"xhJX6zv.inTJ+HgfwT + ?> \ No newline at end of file diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea new file mode 100644 index 000000000..ec9764eae Binary files /dev/null and b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea differ diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d new file mode 100644 index 000000000..7b142c36d --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d @@ -0,0 +1 @@ +xj1ESWs3Y B0r]!|~)Ͻ99U'"c`VPx-`|1|mZ4HI}@RhGI{iFy J?zf2s$]Ngv:vëE(sJٓݾ ԻObw(vx჻.mumZ0 \ No newline at end of file diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c new file mode 100644 index 000000000..ae807eb94 --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c @@ -0,0 +1,2 @@ +xK +0@]$]8`1D xxj-ѥ"`c" QeDIaOkWTW;`^>/9s7q&<%jtL. ~. \ No newline at end of file diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch new file mode 100644 index 000000000..e51ee7bdf --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch @@ -0,0 +1 @@ +77e1bb1effc5857c4d701219a001823432e3586d diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch new file mode 100644 index 000000000..e80dfebb2 --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch @@ -0,0 +1 @@ +5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file new file mode 100644 index 000000000..6b584e8ec --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file @@ -0,0 +1 @@ +content \ No newline at end of file diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file new file mode 100644 index 000000000..47d2739ba --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file @@ -0,0 +1 @@ +new content \ No newline at end of file diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file new file mode 100644 index 000000000..6b584e8ec --- /dev/null +++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file @@ -0,0 +1 @@ +content \ No newline at end of file