diff options
Diffstat (limited to 'pkg/gui')
-rw-r--r-- | pkg/gui/confirmation_panel.go | 4 | ||||
-rw-r--r-- | pkg/gui/keybindings.go | 7 | ||||
-rw-r--r-- | pkg/gui/submodules_panel.go | 55 |
3 files changed, 66 insertions, 0 deletions
diff --git a/pkg/gui/confirmation_panel.go b/pkg/gui/confirmation_panel.go index 103b6a084..1035a2f0e 100644 --- a/pkg/gui/confirmation_panel.go +++ b/pkg/gui/confirmation_panel.go @@ -244,6 +244,10 @@ func (gui *Gui) createErrorPanel(message string) error { } func (gui *Gui) surfaceError(err error) error { + if err == nil { + return nil + } + for _, sentinelError := range gui.sentinelErrorsArr() { if err == sentinelError { return err diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 5cd794dcc..97b720b49 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -1621,6 +1621,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.forSubmodule(gui.handleSubmoduleInit), Description: gui.Tr.SLocalize("initSubmodule"), }, + { + ViewName: "files", + Contexts: []string{SUBMODULES_CONTEXT_KEY}, + Key: gui.getKey("submodules.bulkMenu"), + Handler: gui.wrappedHandler(gui.handleBulkSubmoduleActionsMenu), + Description: gui.Tr.SLocalize("viewBulkSubmoduleOptions"), + }, } for _, viewName := range []string{"status", "branches", "files", "commits", "commitFiles", "stash", "menu"} { diff --git a/pkg/gui/submodules_panel.go b/pkg/gui/submodules_panel.go index c620efbbe..9e7b89a08 100644 --- a/pkg/gui/submodules_panel.go +++ b/pkg/gui/submodules_panel.go @@ -194,6 +194,61 @@ func (gui *Gui) handleResetRemoveSubmodule(submodule *models.SubmoduleConfig) er return gui.createMenu(submodule.Name, menuItems, createMenuOptions{showCancel: true}) } +func (gui *Gui) handleBulkSubmoduleActionsMenu() error { + menuItems := []*menuItem{ + { + displayStrings: []string{gui.Tr.SLocalize("bulkInitSubmodules"), utils.ColoredString(gui.GitCommand.SubmoduleBulkInitCmdStr(), color.FgGreen)}, + onPress: func() error { + return gui.WithWaitingStatus(gui.Tr.SLocalize("runningCommand"), func() error { + if err := gui.OSCommand.RunCommand(gui.GitCommand.SubmoduleBulkInitCmdStr()); err != nil { + return gui.surfaceError(err) + } + + return gui.refreshSidePanels(refreshOptions{scope: []int{SUBMODULES}}) + }) + }, + }, + { + displayStrings: []string{gui.Tr.SLocalize("bulkUpdateSubmodules"), utils.ColoredString(gui.GitCommand.SubmoduleBulkUpdateCmdStr(), color.FgYellow)}, + onPress: func() error { + return gui.WithWaitingStatus(gui.Tr.SLocalize("runningCommand"), func() error { + if err := gui.OSCommand.RunCommand(gui.GitCommand.SubmoduleBulkUpdateCmdStr()); err != nil { + return gui.surfaceError(err) + } + + return gui.refreshSidePanels(refreshOptions{scope: []int{SUBMODULES}}) + }) + }, + }, + { + displayStrings: []string{gui.Tr.SLocalize("submoduleStashAndReset"), utils.ColoredString(fmt.Sprintf("git stash in each submodule && %s", gui.GitCommand.SubmoduleForceBulkUpdateCmdStr()), color.FgRed)}, + onPress: func() error { + return gui.WithWaitingStatus(gui.Tr.SLocalize("runningCommand"), func() error { + if err := gui.GitCommand.ResetSubmodules(gui.State.Submodules); err != nil { + return gui.surfaceError(err) + } + + return gui.refreshSidePanels(refreshOptions{scope: []int{SUBMODULES}}) + }) + }, + }, + { + displayStrings: []string{gui.Tr.SLocalize("bulkDeinitSubmodules"), utils.ColoredString(gui.GitCommand.SubmoduleBulkDeinitCmdStr(), color.FgRed)}, + onPress: func() error { + return gui.WithWaitingStatus(gui.Tr.SLocalize("runningCommand"), func() error { + if err := gui.OSCommand.RunCommand(gui.GitCommand.SubmoduleBulkDeinitCmdStr()); err != nil { + return gui.surfaceError(err) + } + + return gui.refreshSidePanels(refreshOptions{scope: []int{SUBMODULES}}) + }) + }, + }, + } + + return gui.createMenu(gui.Tr.SLocalize("bulkSubmoduleOptions"), menuItems, createMenuOptions{showCancel: true}) +} + func (gui *Gui) handleUpdateSubmodule(submodule *models.SubmoduleConfig) error { return gui.WithWaitingStatus(gui.Tr.SLocalize("updatingSubmoduleStatus"), func() error { err := gui.GitCommand.SubmoduleUpdate(submodule.Path) |