From cf27974ea330ba3cd2d01ca778acf6d8a887f0d7 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 2 Dec 2024 11:35:26 +0100 Subject: [PATCH] Add test for moving a commit across a branch boundary in a stack The test demonstrates that the behavior is undesirable right now: we move the commit only past the update-ref todo of branch1, which means the order of commits stays the same and only the branch head icon moves up by one. However, we move the selection down by one, so the wrong commit is selected now. This is especially bad if you type a bunch of ctrl-j quickly in a row, because now you are moving the wrong commit. There are two possible ways to fix this: 1) keep the moving behavior the same, but don't change the selection 2) change the behavior so that we move the commit not only past the update-ref, but also past the next real commit. You could argue that 1) is the more desirable fix, as it gives you more control over where exactly the moved commit goes; however, it is much trickier to implement, so we go with 2) for now (and that's what the commented-out "EXPECTED" section documents here). If users need more fine-grained control, they can always enter an interactive rebase first. --- ...e_across_branch_boundary_outside_rebase.go | 54 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 55 insertions(+) create mode 100644 pkg/integration/tests/interactive_rebase/move_across_branch_boundary_outside_rebase.go diff --git a/pkg/integration/tests/interactive_rebase/move_across_branch_boundary_outside_rebase.go b/pkg/integration/tests/interactive_rebase/move_across_branch_boundary_outside_rebase.go new file mode 100644 index 000000000..50da17f44 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/move_across_branch_boundary_outside_rebase.go @@ -0,0 +1,54 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MoveAcrossBranchBoundaryOutsideRebase = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Move a commit across a branch boundary in a stack of branches", + ExtraCmdArgs: []string{}, + Skip: false, + GitVersion: AtLeast("2.38.0"), + SetupConfig: func(config *config.AppConfig) { + config.GetUserConfig().Git.MainBranches = []string{"master"} + config.GetAppState().GitLogShowGraph = "never" + }, + SetupRepo: func(shell *Shell) { + shell. + CreateNCommits(1). + NewBranch("branch1"). + CreateNCommitsStartingAt(2, 2). + NewBranch("branch2"). + CreateNCommitsStartingAt(2, 4) + + shell.SetConfig("rebase.updateRefs", "true") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("CI commit 05").IsSelected(), + Contains("CI commit 04"), + Contains("CI * commit 03"), + Contains("CI commit 02"), + Contains("CI commit 01"), + ). + NavigateToLine(Contains("commit 04")). + Press(keys.Commits.MoveDownCommit). + Lines( + /* EXPECTED: + Contains("CI commit 05"), + Contains("CI * commit 03"), + Contains("CI commit 04").IsSelected(), + Contains("CI commit 02"), + Contains("CI commit 01"), + ACTUAL: */ + Contains("CI commit 05"), + Contains("CI * commit 04"), + Contains("CI commit 03").IsSelected(), + Contains("CI commit 02"), + Contains("CI commit 01"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 041f0416f..782bdcb1b 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -223,6 +223,7 @@ var tests = []*components.IntegrationTest{ interactive_rebase.InteractiveRebaseOfCopiedBranch, interactive_rebase.MidRebaseRangeSelect, interactive_rebase.Move, + interactive_rebase.MoveAcrossBranchBoundaryOutsideRebase, interactive_rebase.MoveInRebase, interactive_rebase.MoveUpdateRefTodo, interactive_rebase.MoveWithCustomCommentChar,