diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2021-03-16 09:07:00 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2021-03-30 21:57:00 +1100 |
commit | cd0532b4d6e9dcb846c6ce5ad88be7e0cf671a40 (patch) | |
tree | 3dcd1e911036ac003fd7ae222aa863a534adae6f /pkg/gui/files_panel.go | |
parent | c9de6c003bf28c7f5fdb5ed7aaf70793836b324d (diff) |
allow ignoring directories
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r-- | pkg/gui/files_panel.go | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index 772b05cf3..30ce0a51f 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -294,24 +294,43 @@ func (gui *Gui) handleStageAll(g *gocui.Gui, v *gocui.View) error { return gui.selectFile(false) } -func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error { - file := gui.getSelectedFile() - if file == nil { +func (gui *Gui) handleIgnoreFile() error { + node := gui.getSelectedStatusNode() + if node == nil { return nil } - if file.Name == ".gitignore" { + + if node.GetPath() == ".gitignore" { return gui.createErrorPanel("Cannot ignore .gitignore") } - if file.Tracked { + unstageFiles := func() error { + return node.ForEachFile(func(file *models.File) error { + if file.HasStagedChanges { + if err := gui.GitCommand.UnStageFile(file.Name, file.Tracked); err != nil { + return err + } + } + + return nil + }) + } + + if node.GetIsTracked() { return gui.ask(askOpts{ title: gui.Tr.IgnoreTracked, prompt: gui.Tr.IgnoreTrackedPrompt, handleConfirm: func() error { - if err := gui.GitCommand.Ignore(file.Name); err != nil { + // not 100% sure if this is necessary but I'll assume it is + if err := unstageFiles(); err != nil { return err } - if err := gui.GitCommand.RemoveTrackedFiles(file.Name); err != nil { + + if err := gui.GitCommand.RemoveTrackedFiles(node.GetPath()); err != nil { + return err + } + + if err := gui.GitCommand.Ignore(node.GetPath()); err != nil { return err } return gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}) @@ -319,7 +338,11 @@ func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error { }) } - if err := gui.GitCommand.Ignore(file.Name); err != nil { + if err := unstageFiles(); err != nil { + return err + } + + if err := gui.GitCommand.Ignore(node.GetPath()); err != nil { return gui.surfaceError(err) } |