summaryrefslogtreecommitdiffstats
path: root/pkg/gui
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui')
-rw-r--r--pkg/gui/confirmation_panel.go4
-rw-r--r--pkg/gui/keybindings.go7
-rw-r--r--pkg/gui/submodules_panel.go55
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)