mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-10-06 14:06:32 -04:00
Which pane a side of a file's diff appeared in depended on what else the file had: the staged side had the lower pane while there were unstaged changes above it, and took over the upper one when there weren't. So the same content moved about, and which side a pane was showing was something the code had to work out from the file's status rather than knowing from the pane. Now each side has a pane of its own — unstaged above, staged below — shown when there is something on it. A file with nothing unstaged shows its staged changes in the lower pane alone, which then has the whole space, including the label of the key that focuses it. Nothing about this is visible to the user: the same diff appears in the same place, with the same title and the same label, and the same keys focus and scroll it. What it is for is the code, which no longer has to ask the file what a pane is showing — and, once the diff can be staged from, no longer has to make one key mean opposite things in the same pane. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
80 lines
2.4 KiB
Go
80 lines
2.4 KiB
Go
package diff
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
|
)
|
|
|
|
var DiffAndApplyPatch = NewIntegrationTest(NewIntegrationTestArgs{
|
|
Description: "Create a patch from the diff between two branches and apply the patch.",
|
|
ExtraCmdArgs: []string{},
|
|
Skip: false,
|
|
SetupConfig: func(config *config.AppConfig) {},
|
|
SetupRepo: func(shell *Shell) {
|
|
shell.NewBranch("branch-a")
|
|
shell.CreateFileAndAdd("file1", "first line\n")
|
|
shell.Commit("first commit")
|
|
|
|
shell.NewBranch("branch-b")
|
|
shell.UpdateFileAndAdd("file1", "first line\nsecond line\n")
|
|
shell.Commit("update")
|
|
|
|
shell.Checkout("branch-a")
|
|
},
|
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
|
t.Views().Branches().
|
|
Focus().
|
|
Lines(
|
|
Contains("branch-a"),
|
|
Contains("branch-b"),
|
|
).
|
|
Press(keys.Universal.DiffingMenu)
|
|
|
|
t.ExpectPopup().Menu().Title(Equals("Diffing")).Select(Equals("Diff branch-a")).Confirm()
|
|
|
|
t.Views().Information().Content(Contains("Showing output for: git diff --stat -p branch-a branch-a"))
|
|
|
|
t.Views().Branches().
|
|
IsFocused().
|
|
SelectNextItem().
|
|
Tap(func() {
|
|
t.Views().Information().Content(Contains("Showing output for: git diff --stat -p branch-a branch-b"))
|
|
t.Views().Main().Content(Contains("+second line"))
|
|
}).
|
|
PressEnter()
|
|
|
|
t.Views().SubCommits().
|
|
IsFocused().
|
|
SelectedLine(Contains("update")).
|
|
Tap(func() {
|
|
t.Views().Main().Content(Contains("+second line"))
|
|
}).
|
|
PressEnter()
|
|
|
|
t.Views().CommitFiles().
|
|
IsFocused().
|
|
SelectedLine(Contains("file1")).
|
|
Tap(func() {
|
|
t.Views().Main().Content(Contains("+second line"))
|
|
}).
|
|
PressPrimaryAction(). // add the file to the patch
|
|
Press(keys.Universal.DiffingMenu).
|
|
Tap(func() {
|
|
t.ExpectPopup().Menu().Title(Equals("Diffing")).Select(Contains("Exit diff mode")).Confirm()
|
|
|
|
t.Views().Information().Content(Contains("Building patch"))
|
|
}).
|
|
Press(keys.Universal.CreatePatchOptionsMenu)
|
|
|
|
// adding the regex '$' here to distinguish the menu item from the 'Apply patch in reverse' item
|
|
t.ExpectPopup().Menu().Title(Equals("Patch options")).Select(MatchesRegexp("Apply patch$")).Confirm()
|
|
|
|
t.Views().Files().
|
|
Focus().
|
|
SelectedLine(Contains("file1"))
|
|
|
|
// The patch was applied to the index, so the file's changes are all staged.
|
|
t.Views().Secondary().Content(Contains("+second line"))
|
|
},
|
|
})
|