mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 07:36:27 -04:00
When a rebase (or multi-commit cherry-pick or revert) stops with a conflict, it is often useful to look at the diff of the "<-- CONFLICT" commit to double-check that the conflict resolution matches the diff of the original commit. To make that easier, select that commit automatically.
101 lines
2.8 KiB
Go
101 lines
2.8 KiB
Go
package cherry_pick
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
|
"github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
|
|
)
|
|
|
|
var CherryPickConflicts = NewIntegrationTest(NewIntegrationTestArgs{
|
|
Description: "Cherry pick commits from the subcommits view, with conflicts",
|
|
ExtraCmdArgs: []string{},
|
|
Skip: false,
|
|
SetupConfig: func(config *config.AppConfig) {
|
|
config.GetUserConfig().Git.LocalBranchSortOrder = "recency"
|
|
},
|
|
SetupRepo: func(shell *Shell) {
|
|
shared.MergeConflictsSetup(shell)
|
|
},
|
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
|
t.Views().Branches().
|
|
Focus().
|
|
Lines(
|
|
Contains("first-change-branch"),
|
|
Contains("second-change-branch"),
|
|
Contains("original-branch"),
|
|
).
|
|
SelectNextItem().
|
|
PressEnter()
|
|
|
|
t.Views().SubCommits().
|
|
IsFocused().
|
|
TopLines(
|
|
Contains("second-change-branch unrelated change"),
|
|
Contains("second change"),
|
|
).
|
|
Press(keys.Commits.CherryPickCopy).
|
|
Tap(func() {
|
|
t.Views().Information().Content(Contains("1 commit copied"))
|
|
}).
|
|
SelectNextItem().
|
|
Press(keys.Commits.CherryPickCopy)
|
|
|
|
t.Views().Information().Content(Contains("2 commits copied"))
|
|
|
|
t.Views().Commits().
|
|
Focus().
|
|
TopLines(
|
|
Contains("first change").IsSelected(),
|
|
).
|
|
Press(keys.Commits.PasteCommits)
|
|
|
|
t.ExpectPopup().Alert().
|
|
Title(Equals("Cherry-pick")).
|
|
Content(Contains("Are you sure you want to cherry-pick the 2 copied commit(s) onto this branch?")).
|
|
Confirm()
|
|
|
|
t.Common().AcknowledgeConflicts()
|
|
|
|
// cherry pick selection is not cleared when there are conflicts, so that the user
|
|
// is able to abort and try again without having to re-copy the commits
|
|
t.Views().Information().Content(Contains("2 commits copied"))
|
|
|
|
t.Views().Files().
|
|
IsFocused().
|
|
SelectedLine(Contains("file")).
|
|
PressEnter()
|
|
|
|
t.Views().MergeConflicts().
|
|
IsFocused().
|
|
// picking 'Second change'
|
|
SelectNextItem().
|
|
PressPrimaryAction()
|
|
|
|
t.Common().ContinueOnConflictsResolved("cherry-pick")
|
|
|
|
t.Views().Files().IsEmpty()
|
|
|
|
t.Views().Commits().
|
|
Focus().
|
|
TopLines(
|
|
Contains("second-change-branch unrelated change"),
|
|
Contains("second change").IsSelected(),
|
|
Contains("first change"),
|
|
).
|
|
Tap(func() {
|
|
// because we picked 'Second change' when resolving the conflict,
|
|
// we now see this commit as having replaced First Change with Second Change,
|
|
// as opposed to replacing 'Original' with 'Second change'
|
|
t.Views().Main().
|
|
Content(Contains("-First Change")).
|
|
Content(Contains("+Second Change"))
|
|
|
|
t.Views().Information().Content(Contains("2 commits copied"))
|
|
}).
|
|
PressEscape().
|
|
Tap(func() {
|
|
t.Views().Information().Content(DoesNotContain("commits copied"))
|
|
})
|
|
},
|
|
})
|