diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2020-09-28 09:14:32 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2020-09-29 18:21:59 +1000 |
commit | b8da166ab1c66671d681bc2454b911993716de58 (patch) | |
tree | 6c85b73b530d2771c901024dbd1cc762ccbfa208 /pkg/gui/discard_changes_menu_panel.go | |
parent | ca437a65046d5af0c90c337b125af4538e625502 (diff) |
support discarding submodule changes
Diffstat (limited to 'pkg/gui/discard_changes_menu_panel.go')
-rw-r--r-- | pkg/gui/discard_changes_menu_panel.go | 80 |
1 files changed, 56 insertions, 24 deletions
diff --git a/pkg/gui/discard_changes_menu_panel.go b/pkg/gui/discard_changes_menu_panel.go index f8a0f1df2..2c4e8f759 100644 --- a/pkg/gui/discard_changes_menu_panel.go +++ b/pkg/gui/discard_changes_menu_panel.go @@ -2,42 +2,74 @@ package gui import ( "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands" ) +func (gui *Gui) submoduleFromFile(file *commands.File) *commands.SubmoduleConfig { + for _, config := range gui.State.SubmoduleConfigs { + if config.Name == file.Name { + return config + } + } + + return nil +} + func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error { file := gui.getSelectedFile() if file == nil { return nil } - if file.IsSubmodule { - // git submodule foreach '[[ "$name" == "renderers/chartify" ]] && git stash --include-untracked' - // git submodule update --force renderers/chartify - } + var menuItems []*menuItem - menuItems := []*menuItem{ - { - displayString: gui.Tr.SLocalize("discardAllChanges"), - onPress: func() error { - if err := gui.GitCommand.DiscardAllFileChanges(file); err != nil { - return gui.surfaceError(err) - } - return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) + submoduleConfigs := gui.State.SubmoduleConfigs + if file.IsSubmodule(submoduleConfigs) { + submoduleConfig := file.SubmoduleConfig(submoduleConfigs) + + menuItems = []*menuItem{ + { + displayString: gui.Tr.SLocalize("submoduleStashAndReset"), + onPress: func() error { + if err := gui.GitCommand.UnStageFile(file.Name, file.Tracked); err != nil { + return gui.surfaceError(err) + } + if err := gui.GitCommand.SubmoduleStash(submoduleConfig); err != nil { + return gui.surfaceError(err) + } + if err := gui.GitCommand.SubmoduleReset(submoduleConfig); err != nil { + return gui.surfaceError(err) + } + return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) + }, }, - }, - } + } + } else { + menuItems = []*menuItem{ + { + displayString: gui.Tr.SLocalize("discardAllChanges"), + onPress: func() error { + if err := gui.GitCommand.DiscardAllFileChanges(file); err != nil { + return gui.surfaceError(err) + } + return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) + }, + }, + } - if file.HasStagedChanges && file.HasUnstagedChanges { - menuItems = append(menuItems, &menuItem{ - displayString: gui.Tr.SLocalize("discardUnstagedChanges"), - onPress: func() error { - if err := gui.GitCommand.DiscardUnstagedFileChanges(file); err != nil { - return gui.surfaceError(err) - } + if file.HasStagedChanges && file.HasUnstagedChanges { + menuItems = append(menuItems, &menuItem{ + displayString: gui.Tr.SLocalize("discardUnstagedChanges"), + onPress: func() error { + if err := gui.GitCommand.DiscardUnstagedFileChanges(file); err != nil { + return gui.surfaceError(err) + } + + return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) + }, + }) + } - return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) - }, - }) } return gui.createMenu(file.Name, menuItems, createMenuOptions{showCancel: true}) |