summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-03-14 14:41:11 +1100
committerJesse Duffield <jessedduffield@gmail.com>2021-03-30 21:57:00 +1100
commit9f2d7adb8ea8135b402cda8cbb84a97744ec7357 (patch)
tree974c3118b1dcc810dcbc54ed12b63d744b9959fb /pkg/gui/files_panel.go
parent07dd9c6bc8e16632a055c0d705800dc1198fb8f0 (diff)
more improvements
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go51
1 files changed, 34 insertions, 17 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index 8a388f9a0..06a57af60 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -21,14 +21,14 @@ import (
// list panel functions
-// func (gui *Gui) getSelectedStatusNode() *models.StatusLineNode {
-// selectedLine := gui.State.Panels.Files.SelectedLineIdx
-// if selectedLine == -1 {
-// return nil
-// }
+func (gui *Gui) getSelectedStatusNode() *models.StatusLineNode {
+ selectedLine := gui.State.Panels.Files.SelectedLineIdx
+ if selectedLine == -1 {
+ return nil
+ }
-// return gui.State.StatusLineManager.GetItemAtIndex(selectedLine)
-// }
+ return gui.State.StatusLineManager.GetItemAtIndex(selectedLine)
+}
func (gui *Gui) getSelectedFile() *models.File {
selectedLine := gui.State.Panels.Files.SelectedLineIdx
@@ -202,22 +202,39 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
}
func (gui *Gui) handleFilePress() error {
- file := gui.getSelectedFile()
- if file == nil {
+ node := gui.getSelectedStatusNode()
+ if node == nil {
return nil
}
- if file.HasInlineMergeConflicts {
- return gui.handleSwitchToMerge()
- }
+ // need to stage or unstage depending on situation. If we have a merge conflict we can't do anything
- if file.HasUnstagedChanges {
- if err := gui.GitCommand.StageFile(file.Name); err != nil {
- return gui.surfaceError(err)
+ if node.IsLeaf() {
+ file := node.File
+
+ if file.HasInlineMergeConflicts {
+ return gui.handleSwitchToMerge()
+ }
+
+ if file.HasUnstagedChanges {
+ if err := gui.GitCommand.StageFile(file.Name); err != nil {
+ return gui.surfaceError(err)
+ }
+ } else {
+ if err := gui.GitCommand.UnStageFile(file.Name, file.Tracked); err != nil {
+ return gui.surfaceError(err)
+ }
}
} else {
- if err := gui.GitCommand.UnStageFile(file.Name, file.Tracked); err != nil {
- return gui.surfaceError(err)
+ if node.HasUnstagedChanges() {
+ if err := gui.GitCommand.StageFile(node.Path); err != nil {
+ return gui.surfaceError(err)
+ }
+ } else {
+ // pretty sure it doesn't matter that we're always passing true here
+ if err := gui.GitCommand.UnStageFile(node.Path, true); err != nil {
+ return gui.surfaceError(err)
+ }
}
}