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:
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 {
|
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 {
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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().")
|
||||||
|
@ -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).
|
||||||
|
@ -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(
|
||||||
|
@ -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(
|
||||||
|
@ -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().
|
||||||
|
@ -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()
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -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()
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -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()
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -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"),
|
||||||
|
@ -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().
|
||||||
|
@ -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"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user