mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-04-23 12:18:51 +02:00
We allow deleting remote branches (or local and remote branches) only if *all* selected branches have one. We show the a warning about force-deleting as soon as at least one of the selected branches is not fully merged. The added test only tests a few of the most interesting cases; I didn't try to cover the whole space of possible combinations, that would have been too much.
187 lines
5.9 KiB
Go
187 lines
5.9 KiB
Go
package branch
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
|
)
|
|
|
|
var DeleteMultiple = NewIntegrationTest(NewIntegrationTestArgs{
|
|
Description: "Try some combinations of local and remote branch deletions with a range selection of branches",
|
|
ExtraCmdArgs: []string{},
|
|
Skip: false,
|
|
SetupConfig: func(config *config.AppConfig) {
|
|
config.GetAppState().LocalBranchSortOrder = "alphabetic"
|
|
},
|
|
SetupRepo: func(shell *Shell) {
|
|
shell.
|
|
CloneIntoRemote("origin").
|
|
CloneIntoRemote("other-remote").
|
|
EmptyCommit("blah").
|
|
NewBranch("branch-01").
|
|
EmptyCommit("on branch-01 01").
|
|
PushBranchAndSetUpstream("origin", "branch-01").
|
|
EmptyCommit("on branch-01 02").
|
|
NewBranch("branch-02").
|
|
EmptyCommit("on branch-02 01").
|
|
PushBranchAndSetUpstream("origin", "branch-02").
|
|
NewBranchFrom("branch-03", "master").
|
|
EmptyCommit("on branch-03 01").
|
|
NewBranch("current-head").
|
|
EmptyCommit("on current-head").
|
|
NewBranchFrom("branch-04", "master").
|
|
EmptyCommit("on branch-04 01").
|
|
PushBranchAndSetUpstream("other-remote", "branch-04").
|
|
EmptyCommit("on branch-04 02").
|
|
NewBranchFrom("branch-05", "master").
|
|
EmptyCommit("on branch-05 01").
|
|
PushBranchAndSetUpstream("origin", "branch-05").
|
|
NewBranchFrom("branch-06", "master").
|
|
EmptyCommit("on branch-06 01").
|
|
PushBranch("origin", "branch-06").
|
|
PushBranchAndSetUpstream("other-remote", "branch-06").
|
|
EmptyCommit("on branch-06 02").
|
|
Checkout("current-head")
|
|
},
|
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
|
t.Views().Branches().
|
|
Focus().
|
|
Lines(
|
|
Contains("current-head").IsSelected(),
|
|
Contains("branch-01 ↑1"),
|
|
Contains("branch-02 ✓"),
|
|
Contains("branch-03"),
|
|
Contains("branch-04 ↑1"),
|
|
Contains("branch-05 ✓"),
|
|
Contains("branch-06 ↑1"),
|
|
Contains("master"),
|
|
).
|
|
Press(keys.Universal.RangeSelectDown).
|
|
|
|
// Deleting a range that includes the current branch is not possible
|
|
Press(keys.Universal.Remove).
|
|
Tap(func() {
|
|
t.ExpectPopup().
|
|
Menu().
|
|
Tooltip(Contains("You cannot delete the checked out branch!")).
|
|
Title(Equals("Delete selected branches?")).
|
|
Select(Contains("Delete local branches")).
|
|
Confirm().
|
|
Tap(func() {
|
|
t.ExpectToast(Contains("You cannot delete the checked out branch!"))
|
|
}).
|
|
Cancel()
|
|
}).
|
|
|
|
// Delete branch-03 and branch-04. 04 is not fully merged, so we get
|
|
// a confirmation popup.
|
|
NavigateToLine(Contains("branch-03")).
|
|
Press(keys.Universal.RangeSelectDown).
|
|
Press(keys.Universal.Remove).
|
|
Tap(func() {
|
|
t.ExpectPopup().
|
|
Menu().
|
|
Title(Equals("Delete selected branches?")).
|
|
Select(Contains("Delete local branches")).
|
|
Confirm()
|
|
t.ExpectPopup().
|
|
Confirmation().
|
|
Title(Equals("Force delete branch")).
|
|
Content(Equals("Some of the selected branches are not fully merged. Are you sure you want to delete them?")).
|
|
Confirm()
|
|
}).
|
|
Lines(
|
|
Contains("current-head"),
|
|
Contains("branch-01 ↑1"),
|
|
Contains("branch-02 ✓"),
|
|
Contains("branch-05 ✓").IsSelected(),
|
|
Contains("branch-06 ↑1"),
|
|
Contains("master"),
|
|
).
|
|
|
|
// Delete remote branches of branch-05 and branch-06. They are on different remotes.
|
|
NavigateToLine(Contains("branch-05")).
|
|
Press(keys.Universal.RangeSelectDown).
|
|
Press(keys.Universal.Remove).
|
|
Tap(func() {
|
|
t.ExpectPopup().
|
|
Menu().
|
|
Title(Equals("Delete selected branches?")).
|
|
Select(Contains("Delete remote branches")).
|
|
Confirm()
|
|
}).
|
|
Tap(func() {
|
|
t.ExpectPopup().
|
|
Confirmation().
|
|
Title(Equals("Delete selected branches?")).
|
|
Content(Equals("Are you sure you want to delete the remote branches of the selected branches from their respective remotes?")).
|
|
Confirm()
|
|
}).
|
|
Tap(func() {
|
|
checkRemoteBranches(t, keys, "origin", []string{
|
|
"branch-01",
|
|
"branch-02",
|
|
"branch-06",
|
|
})
|
|
checkRemoteBranches(t, keys, "other-remote", []string{
|
|
"branch-04",
|
|
})
|
|
}).
|
|
Lines(
|
|
Contains("current-head"),
|
|
Contains("branch-01 ↑1"),
|
|
Contains("branch-02 ✓"),
|
|
Contains("branch-05 (upstream gone)").IsSelected(),
|
|
Contains("branch-06 (upstream gone)").IsSelected(),
|
|
Contains("master"),
|
|
).
|
|
|
|
// Try to delete both local and remote branches of branch-02 and
|
|
// branch-05; not possible because branch-05's upstream is gone
|
|
Press(keys.Universal.Remove).
|
|
Tap(func() {
|
|
t.ExpectPopup().
|
|
Menu().
|
|
Title(Equals("Delete selected branches?")).
|
|
Select(Contains("Delete local and remote branches")).
|
|
Confirm().
|
|
Tap(func() {
|
|
t.ExpectToast(Contains("Some of the selected branches have no upstream (or the upstream is not stored locally)"))
|
|
}).
|
|
Cancel()
|
|
}).
|
|
|
|
// Delete both local and remote branches of branch-01 and branch-02. We get
|
|
// the force-delete warning because branch-01 it is not fully merged.
|
|
NavigateToLine(Contains("branch-01")).
|
|
Press(keys.Universal.RangeSelectDown).
|
|
Press(keys.Universal.Remove).
|
|
Tap(func() {
|
|
t.ExpectPopup().
|
|
Menu().
|
|
Title(Equals("Delete selected branches?")).
|
|
Select(Contains("Delete local and remote branches")).
|
|
Confirm()
|
|
t.ExpectPopup().
|
|
Confirmation().
|
|
Title(Equals("Delete local and remote branch")).
|
|
Content(Contains("Are you sure you want to delete both the selected branches from your machine, and their remote branches from their respective remotes?").
|
|
Contains("Some of the selected branches are not fully merged. Are you sure you want to delete them?")).
|
|
Confirm()
|
|
}).
|
|
Lines(
|
|
Contains("current-head"),
|
|
Contains("branch-05 (upstream gone)").IsSelected(),
|
|
Contains("branch-06 (upstream gone)"),
|
|
Contains("master"),
|
|
).
|
|
Tap(func() {
|
|
checkRemoteBranches(t, keys, "origin", []string{
|
|
"branch-06",
|
|
})
|
|
checkRemoteBranches(t, keys, "other-remote", []string{
|
|
"branch-04",
|
|
})
|
|
})
|
|
},
|
|
})
|