summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-03-18 20:44:33 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-03-23 13:26:17 +1100
commitff97ef7b94b5ccfda1d8b98b0a7e21a779309fcc (patch)
tree3eea28e8b5e635e8b23138ecd9a5cdc7fe0c4e8a /pkg/gui/files_panel.go
parenta2c780b085b4b5fecf387d4f848d562494ab51cc (diff)
support discarding unstaged changes
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go91
1 files changed, 62 insertions, 29 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index 843286e9e..deaffb83b 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -259,35 +259,6 @@ func (gui *Gui) handleAddPatch(g *gocui.Gui, v *gocui.View) error {
return gui.Errors.ErrSubProcess
}
-func (gui *Gui) handleFileRemove(g *gocui.Gui, v *gocui.View) error {
- file, err := gui.getSelectedFile(g)
- if err != nil {
- if err == gui.Errors.ErrNoFiles {
- return nil
- }
- return err
- }
- var deleteVerb string
- if file.Tracked {
- deleteVerb = gui.Tr.SLocalize("checkout")
- } else {
- deleteVerb = gui.Tr.SLocalize("delete")
- }
- message := gui.Tr.TemplateLocalize(
- "SureTo",
- Teml{
- "deleteVerb": deleteVerb,
- "fileName": file.Name,
- },
- )
- return gui.createConfirmationPanel(g, v, strings.Title(deleteVerb)+" file", message, func(g *gocui.Gui, v *gocui.View) error {
- if err := gui.GitCommand.RemoveFile(file); err != nil {
- return gui.createErrorPanel(gui.g, err.Error())
- }
- return gui.refreshFiles()
- }, nil)
-}
-
func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile(g)
if err != nil {
@@ -521,3 +492,65 @@ func (gui *Gui) handleSoftReset(g *gocui.Gui, v *gocui.View) error {
return gui.refreshFiles()
}, nil)
}
+
+type discardOption struct {
+ handler func(fileName *commands.File) error
+ description string
+}
+
+type discardOptionValue int
+
+// GetDisplayStrings is a function.
+func (r *discardOption) GetDisplayStrings(isFocused bool) []string {
+ return []string{r.description}
+}
+
+func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
+ file, err := gui.getSelectedFile(g)
+ if err != nil {
+ if err != gui.Errors.ErrNoFiles {
+ return err
+ }
+ return nil
+ }
+
+ options := []*discardOption{
+ {
+ description: gui.Tr.SLocalize("discardAllChanges"),
+ handler: func(file *commands.File) error {
+ if err := gui.GitCommand.DiscardAllFileChanges(file); err != nil {
+ return err
+ }
+
+ return gui.refreshFiles()
+ },
+ },
+ {
+ description: gui.Tr.SLocalize("cancel"),
+ handler: func(file *commands.File) error {
+ return nil
+ },
+ },
+ }
+
+ if file.HasStagedChanges && file.HasUnstagedChanges {
+ discardUnstagedChanges := &discardOption{
+ description: gui.Tr.SLocalize("discardUnstagedChanges"),
+ handler: func(file *commands.File) error {
+ if err := gui.GitCommand.DiscardUnstagedFileChanges(file); err != nil {
+ return err
+ }
+
+ return gui.refreshFiles()
+ },
+ }
+
+ options = append(options[:1], append([]*discardOption{discardUnstagedChanges}, options[1:]...)...)
+ }
+
+ handleMenuPress := func(index int) error {
+ return options[index].handler(file)
+ }
+
+ return gui.createMenu(file.Name, options, handleMenuPress)
+}