mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-03-19 21:28:28 +02:00
Use ErrorToast instead of error panel when invoking a disabled command
This commit is contained in:
parent
99a3ccde71
commit
09a24ee97d
@ -173,7 +173,8 @@ func (self *MenuContext) GetKeybindings(opts types.KeybindingsOpts) []*types.Bin
|
||||
|
||||
func (self *MenuContext) OnMenuPress(selectedItem *types.MenuItem) error {
|
||||
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 {
|
||||
|
@ -416,7 +416,8 @@ func (gui *Gui) callKeybindingHandler(binding *types.Binding) error {
|
||||
disabledReason = binding.GetDisabledReason()
|
||||
}
|
||||
if disabledReason != "" {
|
||||
return gui.c.ErrorMsg(disabledReason)
|
||||
gui.c.ErrorToast(gui.Tr.DisabledMenuItemPrefix + disabledReason)
|
||||
return nil
|
||||
}
|
||||
return binding.Handler()
|
||||
}
|
||||
|
@ -18,10 +18,12 @@ func (self *MenuDriver) Title(expected *TextMatcher) *MenuDriver {
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *MenuDriver) Confirm() {
|
||||
func (self *MenuDriver) Confirm() *MenuDriver {
|
||||
self.checkNecessaryChecksCompleted()
|
||||
|
||||
self.getViewDriver().PressEnter()
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *MenuDriver) Cancel() {
|
||||
@ -72,6 +74,11 @@ func (self *MenuDriver) Tooltip(option *TextMatcher) *MenuDriver {
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *MenuDriver) Tap(f func()) *MenuDriver {
|
||||
self.getViewDriver().Tap(f)
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *MenuDriver) checkNecessaryChecksCompleted() {
|
||||
if !self.hasCheckedTitle {
|
||||
self.t.Fail("You must check the title of a menu popup by calling Title() before calling Confirm()/Cancel().")
|
||||
|
@ -37,12 +37,11 @@ var Delete = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Tooltip(Contains("You cannot delete the checked out branch!")).
|
||||
Title(Equals("Delete branch 'branch-three'?")).
|
||||
Select(Contains("Delete local branch")).
|
||||
Confirm()
|
||||
t.ExpectPopup().
|
||||
Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Contains("You cannot delete the checked out branch!")).
|
||||
Confirm()
|
||||
Confirm().
|
||||
Tap(func() {
|
||||
t.ExpectToast(Contains("You cannot delete the checked out branch!"))
|
||||
}).
|
||||
Cancel()
|
||||
}).
|
||||
SelectNextItem().
|
||||
Press(keys.Universal.Remove).
|
||||
|
@ -48,11 +48,11 @@ var RebaseToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Title(Equals("Upstream options")).
|
||||
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)")).
|
||||
Confirm()
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("The selected branch has no upstream (or the upstream is not stored locally)")).
|
||||
Confirm()
|
||||
Confirm().
|
||||
Tap(func() {
|
||||
t.ExpectToast(Equals("Disabled: The selected branch has no upstream (or the upstream is not stored locally)"))
|
||||
}).
|
||||
Cancel()
|
||||
}).
|
||||
SelectNextItem().
|
||||
Lines(
|
||||
|
@ -42,11 +42,11 @@ var ResetToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Title(Equals("Upstream options")).
|
||||
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)")).
|
||||
Confirm()
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("The selected branch has no upstream (or the upstream is not stored locally)")).
|
||||
Confirm()
|
||||
Confirm().
|
||||
Tap(func() {
|
||||
t.ExpectToast(Equals("Disabled: The selected branch has no upstream (or the upstream is not stored locally)"))
|
||||
}).
|
||||
Cancel()
|
||||
}).
|
||||
SelectNextItem().
|
||||
Lines(
|
||||
|
@ -30,12 +30,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("File name")).
|
||||
Tooltip(Equals("Disabled: Nothing to copy")).
|
||||
Confirm()
|
||||
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("Nothing to copy")).
|
||||
Confirm()
|
||||
Confirm().
|
||||
Tap(func() {
|
||||
t.ExpectToast(Equals("Disabled: Nothing to copy"))
|
||||
}).
|
||||
Cancel()
|
||||
})
|
||||
|
||||
t.Shell().
|
||||
@ -56,12 +55,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Diff of selected file")).
|
||||
Tooltip(Contains("Disabled: Nothing to copy")).
|
||||
Confirm()
|
||||
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("Nothing to copy")).
|
||||
Confirm()
|
||||
Confirm().
|
||||
Tap(func() {
|
||||
t.ExpectToast(Equals("Disabled: Nothing to copy"))
|
||||
}).
|
||||
Cancel()
|
||||
}).
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
@ -69,12 +67,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Diff of all files")).
|
||||
Tooltip(Contains("Disabled: Nothing to copy")).
|
||||
Confirm()
|
||||
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("Nothing to copy")).
|
||||
Confirm()
|
||||
Confirm().
|
||||
Tap(func() {
|
||||
t.ExpectToast(Equals("Disabled: Nothing to copy"))
|
||||
}).
|
||||
Cancel()
|
||||
})
|
||||
|
||||
t.Shell().
|
||||
|
@ -34,10 +34,7 @@ var AmendNonHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains(commit)).
|
||||
Press(keys.Commits.AmendToCommit)
|
||||
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Contains("Can't perform this action during a rebase")).
|
||||
Confirm()
|
||||
t.ExpectToast(Contains("Can't perform this action during a rebase"))
|
||||
}
|
||||
},
|
||||
})
|
||||
|
@ -29,9 +29,6 @@ var EditNonTodoCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains("commit 01")).
|
||||
Press(keys.Universal.Edit)
|
||||
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Contains("Can't perform this action during a rebase")).
|
||||
Confirm()
|
||||
t.ExpectToast(Contains("Can't perform this action during a rebase"))
|
||||
},
|
||||
})
|
||||
|
@ -39,9 +39,6 @@ var EditTheConflCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains("<-- YOU ARE HERE --- commit three")).
|
||||
Press(keys.Commits.RenameCommit)
|
||||
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Contains("Changing this kind of rebase todo entry is not allowed")).
|
||||
Confirm()
|
||||
t.ExpectToast(Contains("Changing this kind of rebase todo entry is not allowed"))
|
||||
},
|
||||
})
|
||||
|
@ -24,10 +24,7 @@ var FixupFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains("commit 01")).
|
||||
Press(keys.Commits.MarkCommitAsFixup).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("There's no commit below to squash into")).
|
||||
Confirm()
|
||||
t.ExpectToast(Equals("Disabled: There's no commit below to squash into"))
|
||||
}).
|
||||
Lines(
|
||||
Contains("commit 02"),
|
||||
|
@ -50,13 +50,9 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Contains("initial commit"),
|
||||
).
|
||||
// Verify we can't quick start from main
|
||||
Press(keys.Commits.StartInteractiveRebase).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Alert().
|
||||
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()
|
||||
})
|
||||
Press(keys.Commits.StartInteractiveRebase)
|
||||
|
||||
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`."))
|
||||
|
||||
t.Views().Branches().
|
||||
Focus().
|
||||
@ -80,15 +76,10 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Contains("initial commit"),
|
||||
).
|
||||
// Try again, verify we fail because we're already rebasing
|
||||
Press(keys.Commits.StartInteractiveRebase).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Contains("Can't perform this action during a rebase")).
|
||||
Confirm()
|
||||
Press(keys.Commits.StartInteractiveRebase)
|
||||
|
||||
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
|
||||
t.Views().Branches().
|
||||
|
@ -24,10 +24,7 @@ var SquashDownFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains("commit 01")).
|
||||
Press(keys.Commits.SquashDown).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Alert().
|
||||
Title(Equals("Error")).
|
||||
Content(Equals("There's no commit below to squash into")).
|
||||
Confirm()
|
||||
t.ExpectToast(Equals("Disabled: There's no commit below to squash into"))
|
||||
}).
|
||||
Lines(
|
||||
Contains("commit 02"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user