summaryrefslogtreecommitdiffstats
path: root/pkg/gui/workspace_reset_options_panel.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/workspace_reset_options_panel.go')
-rw-r--r--pkg/gui/workspace_reset_options_panel.go100
1 files changed, 100 insertions, 0 deletions
diff --git a/pkg/gui/workspace_reset_options_panel.go b/pkg/gui/workspace_reset_options_panel.go
new file mode 100644
index 000000000..0e3cd59c6
--- /dev/null
+++ b/pkg/gui/workspace_reset_options_panel.go
@@ -0,0 +1,100 @@
+package gui
+
+import (
+ "github.com/fatih/color"
+ "github.com/jesseduffield/gocui"
+)
+
+type workspaceResetOption struct {
+ handler func() error
+ description string
+ command string
+}
+
+// GetDisplayStrings is a function.
+func (r *workspaceResetOption) GetDisplayStrings(isFocused bool) []string {
+ return []string{r.description, color.New(color.FgRed).Sprint(r.command)}
+}
+
+func (gui *Gui) handleCreateResetMenu(g *gocui.Gui, v *gocui.View) error {
+ options := []*workspaceResetOption{
+ {
+ description: gui.Tr.SLocalize("discardAllChangesToAllFiles"),
+ command: "reset --hard HEAD && git clean -fd",
+ handler: func() error {
+ if err := gui.GitCommand.ResetAndClean(); err != nil {
+ return gui.createErrorPanel(gui.g, err.Error())
+ }
+
+ return gui.refreshFiles()
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("discardAnyUnstagedChanges"),
+ command: "git checkout -- .",
+ handler: func() error {
+ if err := gui.GitCommand.DiscardAnyUnstagedFileChanges(); err != nil {
+ return gui.createErrorPanel(gui.g, err.Error())
+ }
+
+ return gui.refreshFiles()
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("discardUntrackedFiles"),
+ command: "git clean -fd",
+ handler: func() error {
+ if err := gui.GitCommand.RemoveUntrackedFiles(); err != nil {
+ return gui.createErrorPanel(gui.g, err.Error())
+ }
+
+ return gui.refreshFiles()
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("softReset"),
+ command: "git reset --soft HEAD",
+ handler: func() error {
+ if err := gui.GitCommand.ResetSoft("HEAD"); err != nil {
+ return gui.createErrorPanel(gui.g, err.Error())
+ }
+
+ return gui.refreshFiles()
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("hardReset"),
+ command: "git reset --hard HEAD",
+ handler: func() error {
+ if err := gui.GitCommand.ResetHard("HEAD"); err != nil {
+ return gui.createErrorPanel(gui.g, err.Error())
+ }
+
+ return gui.refreshFiles()
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("hardResetUpstream"),
+ command: "git reset --hard @{upstream}",
+ handler: func() error {
+ if err := gui.GitCommand.ResetHard("@{upstream}"); err != nil {
+ return gui.createErrorPanel(gui.g, err.Error())
+ }
+
+ return gui.refreshSidePanels(gui.g)
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("cancel"),
+ handler: func() error {
+ return nil
+ },
+ },
+ }
+
+ handleMenuPress := func(index int) error {
+ return options[index].handler()
+ }
+
+ return gui.createMenu("", options, len(options), handleMenuPress)
+}