mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-08-26 18:14:28 -05: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.
112 lines
2.7 KiB
Go
112 lines
2.7 KiB
Go
package commit
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
|
)
|
|
|
|
func setupForAmendTests(shell *Shell) {
|
|
shell.EmptyCommit("base commit")
|
|
shell.NewBranch("branch")
|
|
shell.Checkout("master")
|
|
shell.CreateFileAndAdd("file1", "master")
|
|
shell.Commit("file1 changed in master")
|
|
shell.Checkout("branch")
|
|
shell.UpdateFileAndAdd("file2", "two")
|
|
shell.Commit("commit two")
|
|
shell.CreateFileAndAdd("file1", "branch")
|
|
shell.Commit("file1 changed in branch")
|
|
shell.UpdateFileAndAdd("file3", "three")
|
|
shell.Commit("commit three")
|
|
}
|
|
|
|
func doTheRebaseForAmendTests(t *TestDriver, keys config.KeybindingConfig) {
|
|
t.Views().Commits().
|
|
Focus().
|
|
Lines(
|
|
Contains("commit three").IsSelected(),
|
|
Contains("file1 changed in branch"),
|
|
Contains("commit two"),
|
|
Contains("base commit"),
|
|
)
|
|
t.Views().Branches().
|
|
Focus().
|
|
NavigateToLine(Contains("master")).
|
|
Press(keys.Branches.RebaseBranch).
|
|
Tap(func() {
|
|
t.ExpectPopup().Menu().
|
|
Title(Equals("Rebase 'branch'")).
|
|
Select(Contains("Simple rebase")).
|
|
Confirm()
|
|
t.Common().AcknowledgeConflicts()
|
|
})
|
|
|
|
t.Views().Commits().
|
|
Lines(
|
|
Contains("─── Pending rebase todos"),
|
|
Contains("pick").Contains("commit three"),
|
|
Contains("pick").Contains("<-- CONFLICT --- file1 changed in branch").IsSelected(),
|
|
Contains("─── Commits"),
|
|
Contains("commit two"),
|
|
Contains("file1 changed in master"),
|
|
Contains("base commit"),
|
|
)
|
|
|
|
t.Views().Files().
|
|
Focus().
|
|
PressEnter()
|
|
|
|
t.Views().MergeConflicts().
|
|
IsFocused().
|
|
SelectNextItem(). // choose "incoming"
|
|
PressPrimaryAction()
|
|
|
|
t.ExpectPopup().Confirmation().
|
|
Title(Equals("Continue")).
|
|
Content(Contains("All merge conflicts resolved. Continue the rebase?")).
|
|
Cancel()
|
|
}
|
|
|
|
func checkCommitContainsChange(t *TestDriver, commitSubject string, change string) {
|
|
t.Views().Commits().
|
|
Focus().
|
|
NavigateToLine(Contains(commitSubject))
|
|
t.Views().Main().
|
|
Content(Contains(change))
|
|
}
|
|
|
|
func checkBlockingHook(t *TestDriver, keys config.KeybindingConfig) {
|
|
// Shared function for tests using the blockingHook pre-commit hook for testing hook skipping
|
|
// Stage first file
|
|
t.Views().Files().
|
|
IsFocused().
|
|
PressPrimaryAction().
|
|
Press(keys.Files.CommitChanges)
|
|
|
|
// Try to commit with hook
|
|
t.ExpectPopup().CommitMessagePanel().
|
|
Title(Equals("Commit summary")).
|
|
Type("Commit should fail").
|
|
Confirm()
|
|
|
|
t.ExpectPopup().Alert().
|
|
Title(Equals("Error")).
|
|
Content(Contains("Git command failed.")).
|
|
Confirm()
|
|
|
|
// Clear the message
|
|
t.Views().Files().
|
|
IsFocused().
|
|
Press(keys.Files.CommitChanges)
|
|
|
|
t.ExpectPopup().CommitMessagePanel().
|
|
Title(Equals("Commit summary")).
|
|
Clear().
|
|
Cancel()
|
|
|
|
// Unstage the file
|
|
t.Views().Files().
|
|
IsFocused().
|
|
PressPrimaryAction()
|
|
}
|