From efb049cd2444c4c08e85404f1d1e0b507daa83ab Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Tue, 14 Aug 2018 18:29:25 +1000 Subject: [PATCH] better error handling for stashing files --- pkg/gui/files_panel.go | 18 +++++++++++++++--- pkg/gui/stash_panel.go | 3 +++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index 4e04eb1c5..a7e9683d2 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -21,7 +21,8 @@ var ( errNoUsername = errors.New(`No username set. Please do: git config --global user.name "Your Name"`) ) -func (gui *Gui) stagedFiles(files []commands.File) []commands.File { +func (gui *Gui) stagedFiles() []commands.File { + files := gui.State.Files result := make([]commands.File, 0) for _, file := range files { if file.HasStagedChanges { @@ -31,6 +32,17 @@ func (gui *Gui) stagedFiles(files []commands.File) []commands.File { return result } +func (gui *Gui) trackedFiles() []commands.File { + files := gui.State.Files + result := make([]commands.File, 0) + for _, file := range files { + if file.Tracked { + result = append(result, file) + } + } + return result +} + func (gui *Gui) stageSelectedFile(g *gocui.Gui) error { file, err := gui.getSelectedFile(g) if err != nil { @@ -180,7 +192,7 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleCommitPress(g *gocui.Gui, filesView *gocui.View) error { - if len(gui.stagedFiles(gui.State.Files)) == 0 && !gui.State.HasMergeConflicts { + if len(gui.stagedFiles()) == 0 && !gui.State.HasMergeConflicts { return gui.createErrorPanel(g, "There are no staged files to commit") } commitMessageView := gui.getCommitMessageView(g) @@ -195,7 +207,7 @@ func (gui *Gui) handleCommitPress(g *gocui.Gui, filesView *gocui.View) error { // handleCommitEditorPress - handle when the user wants to commit changes via // their editor rather than via the popup panel func (gui *Gui) handleCommitEditorPress(g *gocui.Gui, filesView *gocui.View) error { - if len(gui.stagedFiles(gui.State.Files)) == 0 && !gui.State.HasMergeConflicts { + if len(gui.stagedFiles()) == 0 && !gui.State.HasMergeConflicts { return gui.createErrorPanel(g, "There are no staged files to commit") } gui.PrepareSubProcess(g, "git", "commit") diff --git a/pkg/gui/stash_panel.go b/pkg/gui/stash_panel.go index 310ccbc77..b4fb11902 100644 --- a/pkg/gui/stash_panel.go +++ b/pkg/gui/stash_panel.go @@ -83,6 +83,9 @@ func (gui *Gui) stashDo(g *gocui.Gui, v *gocui.View, method string) error { } func (gui *Gui) handleStashSave(g *gocui.Gui, filesView *gocui.View) error { + if len(gui.trackedFiles()) == 0 && len(gui.stagedFiles()) == 0 { + return gui.createErrorPanel(g, "You have no tracked/staged files to stash") + } gui.createPromptPanel(g, filesView, "Stash changes", func(g *gocui.Gui, v *gocui.View) error { if err := gui.GitCommand.StashSave(gui.trimmedContent(v)); err != nil { gui.createErrorPanel(g, err.Error())