summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorMark Kopenga <mkopenga@gmail.com>2018-12-08 16:41:39 +0100
committerGitHub <noreply@github.com>2018-12-08 16:41:39 +0100
commit19a6a32625d59c61ecfe91ef8626390eb34a922a (patch)
treeb02d1a9c8477d2614f99cc80b40b54accf28c127 /pkg/gui/files_panel.go
parent270658fc009dc254a80501fc1c9f5f82acd27239 (diff)
parentff856b763033a241370bfde98d7386b43b7d0893 (diff)
Merge branch 'master' into https-ask-for-username-password
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go137
1 files changed, 77 insertions, 60 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index cd8df1859..7942e421b 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -15,6 +15,79 @@ import (
"github.com/jesseduffield/lazygit/pkg/utils"
)
+// list panel functions
+
+func (gui *Gui) getSelectedFile(g *gocui.Gui) (*commands.File, error) {
+ selectedLine := gui.State.Panels.Files.SelectedLine
+ if selectedLine == -1 {
+ return &commands.File{}, gui.Errors.ErrNoFiles
+ }
+
+ return gui.State.Files[selectedLine], nil
+}
+
+func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error {
+ file, err := gui.getSelectedFile(g)
+ if err != nil {
+ if err != gui.Errors.ErrNoFiles {
+ return err
+ }
+ return gui.renderString(g, "main", gui.Tr.SLocalize("NoChangedFiles"))
+ }
+
+ if file.HasMergeConflicts {
+ return gui.refreshMergePanel(g)
+ }
+
+ if err := gui.focusPoint(0, gui.State.Panels.Files.SelectedLine, v); err != nil {
+ return err
+ }
+
+ content := gui.GitCommand.Diff(file, false)
+ return gui.renderString(g, "main", content)
+}
+
+func (gui *Gui) refreshFiles(g *gocui.Gui) error {
+ filesView, err := g.View("files")
+ if err != nil {
+ return err
+ }
+ gui.refreshStateFiles()
+
+ gui.g.Update(func(g *gocui.Gui) error {
+
+ filesView.Clear()
+ list, err := utils.RenderList(gui.State.Files)
+ if err != nil {
+ return err
+ }
+ fmt.Fprint(filesView, list)
+
+ if filesView == g.CurrentView() {
+ return gui.handleFileSelect(g, filesView)
+ }
+ return nil
+ })
+
+ return nil
+}
+
+func (gui *Gui) handleFilesNextLine(g *gocui.Gui, v *gocui.View) error {
+ panelState := gui.State.Panels.Files
+ gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Files), false)
+
+ return gui.handleFileSelect(gui.g, v)
+}
+
+func (gui *Gui) handleFilesPrevLine(g *gocui.Gui, v *gocui.View) error {
+ panelState := gui.State.Panels.Files
+ gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Files), true)
+
+ return gui.handleFileSelect(gui.g, v)
+}
+
+// specific functions
+
func (gui *Gui) stagedFiles() []*commands.File {
files := gui.State.Files
result := make([]*commands.File, 0)
@@ -139,18 +212,6 @@ func (gui *Gui) handleAddPatch(g *gocui.Gui, v *gocui.View) error {
return gui.Errors.ErrSubProcess
}
-func (gui *Gui) getSelectedFile(g *gocui.Gui) (*commands.File, error) {
- if len(gui.State.Files) == 0 {
- return &commands.File{}, gui.Errors.ErrNoFiles
- }
- filesView, err := g.View("files")
- if err != nil {
- panic(err)
- }
- lineNumber := gui.getItemPosition(filesView)
- return gui.State.Files[lineNumber], nil
-}
-
func (gui *Gui) handleFileRemove(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile(g)
if err != nil {
@@ -194,30 +255,6 @@ func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
return gui.refreshFiles(g)
}
-func (gui *Gui) renderfilesOptions(g *gocui.Gui, file *commands.File) error {
- return gui.renderGlobalOptions(g)
-}
-
-func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error {
- file, err := gui.getSelectedFile(g)
- if err != nil {
- if err != gui.Errors.ErrNoFiles {
- return err
- }
- gui.renderString(g, "main", gui.Tr.SLocalize("NoChangedFiles"))
- return gui.renderfilesOptions(g, nil)
- }
- if err := gui.renderfilesOptions(g, file); err != nil {
- return err
- }
- if file.HasMergeConflicts {
- return gui.refreshMergePanel(g)
- }
-
- content := gui.GitCommand.Diff(file, false)
- return gui.renderString(g, "main", content)
-}
-
func (gui *Gui) handleCommitPress(g *gocui.Gui, filesView *gocui.View) error {
if len(gui.stagedFiles()) == 0 && !gui.State.HasMergeConflicts {
return gui.createErrorPanel(g, gui.Tr.SLocalize("NoStagedFilesToCommit"))
@@ -309,6 +346,7 @@ func (gui *Gui) refreshStateFiles() {
// get files to stage
files := gui.GitCommand.GetStatusFiles()
gui.State.Files = gui.GitCommand.MergeStatusFiles(gui.State.Files, files)
+ gui.refreshSelectedLine(&gui.State.Panels.Files.SelectedLine, len(gui.State.Files))
gui.updateHasMergeConflictStatus()
}
@@ -340,27 +378,6 @@ func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
return cat, nil
}
-func (gui *Gui) refreshFiles(g *gocui.Gui) error {
- filesView, err := g.View("files")
- if err != nil {
- return err
- }
- gui.refreshStateFiles()
-
- filesView.Clear()
- list, err := utils.RenderList(gui.State.Files)
- if err != nil {
- return err
- }
- fmt.Fprint(filesView, list)
-
- gui.correctCursor(filesView)
- if filesView == g.CurrentView() {
- gui.handleFileSelect(g, filesView)
- }
- return nil
-}
-
func (gui *Gui) pullFiles(g *gocui.Gui, v *gocui.View) error {
if err := gui.createMessagePanel(gui.g, v, "", gui.Tr.SLocalize("PullWait")); err != nil {
return err
@@ -424,7 +441,7 @@ func (gui *Gui) pushWithForceFlag(g *gocui.Gui, v *gocui.View, force bool) error
func (gui *Gui) pushFiles(g *gocui.Gui, v *gocui.View) error {
// if we have pullables we'll ask if the user wants to force push
- _, pullables := gui.GitCommand.UpstreamDifferenceCount()
+ _, pullables := gui.GitCommand.GetCurrentBranchUpstreamDifferenceCount()
if pullables == "?" || pullables == "0" {
return gui.pushWithForceFlag(g, v, false)
}
@@ -462,9 +479,9 @@ func (gui *Gui) handleAbortMerge(g *gocui.Gui, v *gocui.View) error {
return gui.refreshFiles(g)
}
-func (gui *Gui) handleResetHard(g *gocui.Gui, v *gocui.View) error {
+func (gui *Gui) handleResetAndClean(g *gocui.Gui, v *gocui.View) error {
return gui.createConfirmationPanel(g, v, gui.Tr.SLocalize("ClearFilePanel"), gui.Tr.SLocalize("SureResetHardHead"), func(g *gocui.Gui, v *gocui.View) error {
- if err := gui.GitCommand.ResetHard(); err != nil {
+ if err := gui.GitCommand.ResetAndClean(); err != nil {
gui.createErrorPanel(g, err.Error())
}
return gui.refreshFiles(g)