summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-03-16 09:07:00 +1100
committerJesse Duffield <jessedduffield@gmail.com>2021-03-30 21:57:00 +1100
commitcd0532b4d6e9dcb846c6ce5ad88be7e0cf671a40 (patch)
tree3dcd1e911036ac003fd7ae222aa863a534adae6f /pkg/gui/files_panel.go
parentc9de6c003bf28c7f5fdb5ed7aaf70793836b324d (diff)
allow ignoring directories
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go39
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)
}