diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2021-03-14 14:41:11 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2021-03-30 21:57:00 +1100 |
commit | 9f2d7adb8ea8135b402cda8cbb84a97744ec7357 (patch) | |
tree | 974c3118b1dcc810dcbc54ed12b63d744b9959fb /pkg/gui/files_panel.go | |
parent | 07dd9c6bc8e16632a055c0d705800dc1198fb8f0 (diff) |
more improvements
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r-- | pkg/gui/files_panel.go | 51 |
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) + } } } |