1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-03-21 21:47:32 +02:00

Use ErrorToast instead of error panel when invoking a disabled command

This commit is contained in:
Stefan Haller 2023-12-22 17:31:45 +01:00
parent 99a3ccde71
commit 09a24ee97d
13 changed files with 53 additions and 72 deletions

View File

@ -173,7 +173,8 @@ func (self *MenuContext) GetKeybindings(opts types.KeybindingsOpts) []*types.Bin
func (self *MenuContext) OnMenuPress(selectedItem *types.MenuItem) error { func (self *MenuContext) OnMenuPress(selectedItem *types.MenuItem) error {
if selectedItem != nil && selectedItem.DisabledReason != "" { if selectedItem != nil && selectedItem.DisabledReason != "" {
return self.c.ErrorMsg(selectedItem.DisabledReason) self.c.ErrorToast(self.c.Tr.DisabledMenuItemPrefix + selectedItem.DisabledReason)
return nil
} }
if err := self.c.PopContext(); err != nil { if err := self.c.PopContext(); err != nil {

View File

@ -416,7 +416,8 @@ func (gui *Gui) callKeybindingHandler(binding *types.Binding) error {
disabledReason = binding.GetDisabledReason() disabledReason = binding.GetDisabledReason()
} }
if disabledReason != "" { if disabledReason != "" {
return gui.c.ErrorMsg(disabledReason) gui.c.ErrorToast(gui.Tr.DisabledMenuItemPrefix + disabledReason)
return nil
} }
return binding.Handler() return binding.Handler()
} }

View File

@ -18,10 +18,12 @@ func (self *MenuDriver) Title(expected *TextMatcher) *MenuDriver {
return self return self
} }
func (self *MenuDriver) Confirm() { func (self *MenuDriver) Confirm() *MenuDriver {
self.checkNecessaryChecksCompleted() self.checkNecessaryChecksCompleted()
self.getViewDriver().PressEnter() self.getViewDriver().PressEnter()
return self
} }
func (self *MenuDriver) Cancel() { func (self *MenuDriver) Cancel() {
@ -72,6 +74,11 @@ func (self *MenuDriver) Tooltip(option *TextMatcher) *MenuDriver {
return self return self
} }
func (self *MenuDriver) Tap(f func()) *MenuDriver {
self.getViewDriver().Tap(f)
return self
}
func (self *MenuDriver) checkNecessaryChecksCompleted() { func (self *MenuDriver) checkNecessaryChecksCompleted() {
if !self.hasCheckedTitle { if !self.hasCheckedTitle {
self.t.Fail("You must check the title of a menu popup by calling Title() before calling Confirm()/Cancel().") self.t.Fail("You must check the title of a menu popup by calling Title() before calling Confirm()/Cancel().")

View File

@ -37,12 +37,11 @@ var Delete = NewIntegrationTest(NewIntegrationTestArgs{
Tooltip(Contains("You cannot delete the checked out branch!")). Tooltip(Contains("You cannot delete the checked out branch!")).
Title(Equals("Delete branch 'branch-three'?")). Title(Equals("Delete branch 'branch-three'?")).
Select(Contains("Delete local branch")). Select(Contains("Delete local branch")).
Confirm() Confirm().
t.ExpectPopup(). Tap(func() {
Alert(). t.ExpectToast(Contains("You cannot delete the checked out branch!"))
Title(Equals("Error")). }).
Content(Contains("You cannot delete the checked out branch!")). Cancel()
Confirm()
}). }).
SelectNextItem(). SelectNextItem().
Press(keys.Universal.Remove). Press(keys.Universal.Remove).

View File

@ -48,11 +48,11 @@ var RebaseToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Upstream options")). Title(Equals("Upstream options")).
Select(Contains("Rebase checked-out branch onto upstream of selected branch")). Select(Contains("Rebase checked-out branch onto upstream of selected branch")).
Tooltip(Contains("Disabled: The selected branch has no upstream (or the upstream is not stored locally)")). Tooltip(Contains("Disabled: The selected branch has no upstream (or the upstream is not stored locally)")).
Confirm() Confirm().
t.ExpectPopup().Alert(). Tap(func() {
Title(Equals("Error")). t.ExpectToast(Equals("Disabled: The selected branch has no upstream (or the upstream is not stored locally)"))
Content(Equals("The selected branch has no upstream (or the upstream is not stored locally)")). }).
Confirm() Cancel()
}). }).
SelectNextItem(). SelectNextItem().
Lines( Lines(

View File

@ -42,11 +42,11 @@ var ResetToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Upstream options")). Title(Equals("Upstream options")).
Select(Contains("Reset checked-out branch onto upstream of selected branch")). Select(Contains("Reset checked-out branch onto upstream of selected branch")).
Tooltip(Contains("Disabled: The selected branch has no upstream (or the upstream is not stored locally)")). Tooltip(Contains("Disabled: The selected branch has no upstream (or the upstream is not stored locally)")).
Confirm() Confirm().
t.ExpectPopup().Alert(). Tap(func() {
Title(Equals("Error")). t.ExpectToast(Equals("Disabled: The selected branch has no upstream (or the upstream is not stored locally)"))
Content(Equals("The selected branch has no upstream (or the upstream is not stored locally)")). }).
Confirm() Cancel()
}). }).
SelectNextItem(). SelectNextItem().
Lines( Lines(

View File

@ -30,12 +30,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Copy to clipboard")). Title(Equals("Copy to clipboard")).
Select(Contains("File name")). Select(Contains("File name")).
Tooltip(Equals("Disabled: Nothing to copy")). Tooltip(Equals("Disabled: Nothing to copy")).
Confirm() Confirm().
Tap(func() {
t.ExpectPopup().Alert(). t.ExpectToast(Equals("Disabled: Nothing to copy"))
Title(Equals("Error")). }).
Content(Equals("Nothing to copy")). Cancel()
Confirm()
}) })
t.Shell(). t.Shell().
@ -56,12 +55,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Copy to clipboard")). Title(Equals("Copy to clipboard")).
Select(Contains("Diff of selected file")). Select(Contains("Diff of selected file")).
Tooltip(Contains("Disabled: Nothing to copy")). Tooltip(Contains("Disabled: Nothing to copy")).
Confirm() Confirm().
Tap(func() {
t.ExpectPopup().Alert(). t.ExpectToast(Equals("Disabled: Nothing to copy"))
Title(Equals("Error")). }).
Content(Equals("Nothing to copy")). Cancel()
Confirm()
}). }).
Press(keys.Files.CopyFileInfoToClipboard). Press(keys.Files.CopyFileInfoToClipboard).
Tap(func() { Tap(func() {
@ -69,12 +67,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Copy to clipboard")). Title(Equals("Copy to clipboard")).
Select(Contains("Diff of all files")). Select(Contains("Diff of all files")).
Tooltip(Contains("Disabled: Nothing to copy")). Tooltip(Contains("Disabled: Nothing to copy")).
Confirm() Confirm().
Tap(func() {
t.ExpectPopup().Alert(). t.ExpectToast(Equals("Disabled: Nothing to copy"))
Title(Equals("Error")). }).
Content(Equals("Nothing to copy")). Cancel()
Confirm()
}) })
t.Shell(). t.Shell().

View File

@ -34,10 +34,7 @@ var AmendNonHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains(commit)). NavigateToLine(Contains(commit)).
Press(keys.Commits.AmendToCommit) Press(keys.Commits.AmendToCommit)
t.ExpectPopup().Alert(). t.ExpectToast(Contains("Can't perform this action during a rebase"))
Title(Equals("Error")).
Content(Contains("Can't perform this action during a rebase")).
Confirm()
} }
}, },
}) })

View File

@ -29,9 +29,6 @@ var EditNonTodoCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")). NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit) Press(keys.Universal.Edit)
t.ExpectPopup().Alert(). t.ExpectToast(Contains("Can't perform this action during a rebase"))
Title(Equals("Error")).
Content(Contains("Can't perform this action during a rebase")).
Confirm()
}, },
}) })

View File

@ -39,9 +39,6 @@ var EditTheConflCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("<-- YOU ARE HERE --- commit three")). NavigateToLine(Contains("<-- YOU ARE HERE --- commit three")).
Press(keys.Commits.RenameCommit) Press(keys.Commits.RenameCommit)
t.ExpectPopup().Alert(). t.ExpectToast(Contains("Changing this kind of rebase todo entry is not allowed"))
Title(Equals("Error")).
Content(Contains("Changing this kind of rebase todo entry is not allowed")).
Confirm()
}, },
}) })

View File

@ -24,10 +24,7 @@ var FixupFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")). NavigateToLine(Contains("commit 01")).
Press(keys.Commits.MarkCommitAsFixup). Press(keys.Commits.MarkCommitAsFixup).
Tap(func() { Tap(func() {
t.ExpectPopup().Alert(). t.ExpectToast(Equals("Disabled: There's no commit below to squash into"))
Title(Equals("Error")).
Content(Equals("There's no commit below to squash into")).
Confirm()
}). }).
Lines( Lines(
Contains("commit 02"), Contains("commit 02"),

View File

@ -50,13 +50,9 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
Contains("initial commit"), Contains("initial commit"),
). ).
// Verify we can't quick start from main // Verify we can't quick start from main
Press(keys.Commits.StartInteractiveRebase). Press(keys.Commits.StartInteractiveRebase)
Tap(func() {
t.ExpectPopup().Alert(). t.ExpectToast(Equals("Disabled: Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`."))
Title(Equals("Error")).
Content(Contains("Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`.")).
Confirm()
})
t.Views().Branches(). t.Views().Branches().
Focus(). Focus().
@ -80,15 +76,10 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
Contains("initial commit"), Contains("initial commit"),
). ).
// Try again, verify we fail because we're already rebasing // Try again, verify we fail because we're already rebasing
Press(keys.Commits.StartInteractiveRebase). Press(keys.Commits.StartInteractiveRebase)
Tap(func() {
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Contains("Can't perform this action during a rebase")).
Confirm()
t.Common().AbortRebase() t.ExpectToast(Equals("Disabled: Can't perform this action during a rebase"))
}) t.Common().AbortRebase()
// Verify if a merge commit is present on the branch we start from there // Verify if a merge commit is present on the branch we start from there
t.Views().Branches(). t.Views().Branches().

View File

@ -24,10 +24,7 @@ var SquashDownFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")). NavigateToLine(Contains("commit 01")).
Press(keys.Commits.SquashDown). Press(keys.Commits.SquashDown).
Tap(func() { Tap(func() {
t.ExpectPopup().Alert(). t.ExpectToast(Equals("Disabled: There's no commit below to squash into"))
Title(Equals("Error")).
Content(Equals("There's no commit below to squash into")).
Confirm()
}). }).
Lines( Lines(
Contains("commit 02"), Contains("commit 02"),