diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-03-03 15:21:33 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-03-03 15:21:33 +1100 |
commit | 4bb577ab7d6546d92c75d7840e509caf470403c6 (patch) | |
tree | d7ac8c87c6835d4093d4799fc2242e86b75c0c6b /pkg/gui | |
parent | 8305d8e72f5f941da0b1404376057052054db307 (diff) |
show loading status for rebasing events
Diffstat (limited to 'pkg/gui')
-rw-r--r-- | pkg/gui/app_status_manager.go | 28 | ||||
-rw-r--r-- | pkg/gui/commits_panel.go | 55 |
2 files changed, 61 insertions, 22 deletions
diff --git a/pkg/gui/app_status_manager.go b/pkg/gui/app_status_manager.go index 2d479e42f..9aee3fa11 100644 --- a/pkg/gui/app_status_manager.go +++ b/pkg/gui/app_status_manager.go @@ -1,6 +1,9 @@ package gui -import "github.com/jesseduffield/lazygit/pkg/utils" +import ( + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/utils" +) type appStatus struct { name string @@ -42,3 +45,26 @@ func (m *statusManager) getStatusString() string { } return topStatus.name } + +// WithWaitingStatus wraps a function and shows a waiting status while the function is still executing +func (gui *Gui) WithWaitingStatus(name string, f func() error) error { + go func() { + gui.g.Update(func(g *gocui.Gui) error { + gui.statusManager.addWaitingStatus(name) + return nil + }) + + defer gui.g.Update(func(g *gocui.Gui) error { + gui.statusManager.removeStatus(name) + return nil + }) + + if err := f(); err != nil { + gui.g.Update(func(g *gocui.Gui) error { + return gui.createErrorPanel(gui.g, err.Error()) + }) + } + }() + + return nil +} diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go index 09c951cd2..2cdfc8853 100644 --- a/pkg/gui/commits_panel.go +++ b/pkg/gui/commits_panel.go @@ -144,8 +144,10 @@ func (gui *Gui) handleCommitSquashDown(g *gocui.Gui, v *gocui.View) error { } gui.createConfirmationPanel(g, v, gui.Tr.SLocalize("Squash"), gui.Tr.SLocalize("SureSquashThisCommit"), func(g *gocui.Gui, v *gocui.View) error { - err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "squash") - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("squashing", func() error { + err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "squash") + return gui.handleGenericMergeCommandResult(err) + }) }, nil) return nil } @@ -174,8 +176,10 @@ func (gui *Gui) handleCommitFixup(g *gocui.Gui, v *gocui.View) error { } gui.createConfirmationPanel(g, v, gui.Tr.SLocalize("Fixup"), gui.Tr.SLocalize("SureFixupThisCommit"), func(g *gocui.Gui, v *gocui.View) error { - err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "fixup") - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("fixing up", func() error { + err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "fixup") + return gui.handleGenericMergeCommandResult(err) + }) }, nil) return nil } @@ -272,8 +276,10 @@ func (gui *Gui) handleCommitDelete(g *gocui.Gui, v *gocui.View) error { } return gui.createConfirmationPanel(gui.g, v, gui.Tr.SLocalize("DeleteCommitTitle"), gui.Tr.SLocalize("DeleteCommitPrompt"), func(*gocui.Gui, *gocui.View) error { - err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "drop") - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("deleting", func() error { + err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "drop") + return gui.handleGenericMergeCommandResult(err) + }) }, nil) } @@ -291,11 +297,13 @@ func (gui *Gui) handleCommitMoveDown(g *gocui.Gui, v *gocui.View) error { return gui.refreshCommits(gui.g) } - err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index) - if err == nil { - gui.State.Panels.Commits.SelectedLine++ - } - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("moving", func() error { + err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index) + if err == nil { + gui.State.Panels.Commits.SelectedLine++ + } + return gui.handleGenericMergeCommandResult(err) + }) } func (gui *Gui) handleCommitMoveUp(g *gocui.Gui, v *gocui.View) error { @@ -303,7 +311,6 @@ func (gui *Gui) handleCommitMoveUp(g *gocui.Gui, v *gocui.View) error { if index == 0 { return nil } - selectedCommit := gui.State.Commits[index] if selectedCommit.Status == "rebasing" { if err := gui.GitCommand.MoveTodoDown(index - 1); err != nil { @@ -313,11 +320,13 @@ func (gui *Gui) handleCommitMoveUp(g *gocui.Gui, v *gocui.View) error { return gui.refreshCommits(gui.g) } - err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index-1) - if err == nil { - gui.State.Panels.Commits.SelectedLine-- - } - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("moving", func() error { + err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index-1) + if err == nil { + gui.State.Panels.Commits.SelectedLine-- + } + return gui.handleGenericMergeCommandResult(err) + }) } func (gui *Gui) handleCommitEdit(g *gocui.Gui, v *gocui.View) error { @@ -329,14 +338,18 @@ func (gui *Gui) handleCommitEdit(g *gocui.Gui, v *gocui.View) error { return nil } - err = gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "edit") - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("rebasing", func() error { + err = gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "edit") + return gui.handleGenericMergeCommandResult(err) + }) } func (gui *Gui) handleCommitAmendTo(g *gocui.Gui, v *gocui.View) error { return gui.createConfirmationPanel(gui.g, v, gui.Tr.SLocalize("AmendCommitTitle"), gui.Tr.SLocalize("AmendCommitPrompt"), func(*gocui.Gui, *gocui.View) error { - err := gui.GitCommand.AmendTo(gui.State.Commits[gui.State.Panels.Commits.SelectedLine].Sha) - return gui.handleGenericMergeCommandResult(err) + return gui.WithWaitingStatus("amending", func() error { + err := gui.GitCommand.AmendTo(gui.State.Commits[gui.State.Panels.Commits.SelectedLine].Sha) + return gui.handleGenericMergeCommandResult(err) + }) }, nil) } |