summaryrefslogtreecommitdiffstats
path: root/pkg/gui/discard_changes_menu_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-09-28 09:14:32 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-09-29 18:21:59 +1000
commitb8da166ab1c66671d681bc2454b911993716de58 (patch)
tree6c85b73b530d2771c901024dbd1cc762ccbfa208 /pkg/gui/discard_changes_menu_panel.go
parentca437a65046d5af0c90c337b125af4538e625502 (diff)
support discarding submodule changes
Diffstat (limited to 'pkg/gui/discard_changes_menu_panel.go')
-rw-r--r--pkg/gui/discard_changes_menu_panel.go80
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})