diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-11 21:02:53 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-11 21:02:53 +1100 |
commit | 3d343e9b574a2c99ebf5b30dc9a4dac2886f6d73 (patch) | |
tree | ef6b2f8c08a29349bcc56a16260dfefdb3ee872d /pkg/gui/files_panel.go | |
parent | a3656154906c1117f9c9bbe100aa585e43417897 (diff) | |
parent | 3a607061a2303d9f45d308de652fbebe7300b43c (diff) |
Merge branch 'master' into feature/rebasing
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r-- | pkg/gui/files_panel.go | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index 3c8e6c7e7..915ff45c3 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -26,7 +26,7 @@ func (gui *Gui) getSelectedFile(g *gocui.Gui) (*commands.File, error) { return gui.State.Files[selectedLine], nil } -func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bool) error { file, err := gui.getSelectedFile(g) if err != nil { if err != gui.Errors.ErrNoFiles { @@ -48,10 +48,18 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error { } content := gui.GitCommand.Diff(file, false) + if alreadySelected { + g.Update(func(*gocui.Gui) error { + return gui.setViewContent(gui.g, gui.getMainView(gui.g), content) + }) + return nil + } return gui.renderString(g, "main", content) } func (gui *Gui) refreshFiles() error { + selectedFile, _ := gui.getSelectedFile(gui.g) + filesView := gui.getFilesView() gui.refreshStateFiles() @@ -64,8 +72,10 @@ func (gui *Gui) refreshFiles() error { } fmt.Fprint(filesView, list) - if filesView == gui.g.CurrentView() { - return gui.handleFileSelect(gui.g, filesView) + if filesView == g.CurrentView() { + newSelectedFile, _ := gui.getSelectedFile(gui.g) + alreadySelected := newSelectedFile.Name == selectedFile.Name + return gui.handleFileSelect(g, filesView, alreadySelected) } return nil }) @@ -77,20 +87,14 @@ 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) - if err := gui.resetOrigin(gui.getMainView()); err != nil { - return err - } - return gui.handleFileSelect(gui.g, v) + return gui.handleFileSelect(gui.g, v, false) } 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) - if err := gui.resetOrigin(gui.getMainView()); err != nil { - return err - } - return gui.handleFileSelect(gui.g, v) + return gui.handleFileSelect(gui.g, v, false) } // specific functions @@ -169,7 +173,7 @@ func (gui *Gui) handleFilePress(g *gocui.Gui, v *gocui.View) error { return err } - return gui.handleFileSelect(g, v) + return gui.handleFileSelect(g, v, true) } func (gui *Gui) allFilesStaged() bool { @@ -376,32 +380,32 @@ func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { } func (gui *Gui) pullFiles(g *gocui.Gui, v *gocui.View) error { - gui.createMessagePanel(g, v, "", gui.Tr.SLocalize("PullWait")) + if err := gui.createMessagePanel(gui.g, v, "", gui.Tr.SLocalize("PullWait")); err != nil { + return err + } go func() { - if err := gui.GitCommand.Pull(); err != nil { - gui.createErrorPanel(g, err.Error()) - } else { - gui.closeConfirmationPrompt(g) - gui.refreshCommits(g) - gui.refreshStatus(g) - } - gui.refreshFiles() + unamePassOpend := false + err := gui.GitCommand.Pull(func(passOrUname string) string { + unamePassOpend = true + return gui.waitForPassUname(g, v, passOrUname) + }) + gui.HandleCredentialsPopup(g, unamePassOpend, err) }() return nil } -func (gui *Gui) pushWithForceFlag(currentView *gocui.View, force bool) error { - if err := gui.createMessagePanel(gui.g, currentView, "", gui.Tr.SLocalize("PushWait")); err != nil { +func (gui *Gui) pushWithForceFlag(g *gocui.Gui, v *gocui.View, force bool) error { + if err := gui.createMessagePanel(g, v, "", gui.Tr.SLocalize("PushWait")); err != nil { return err } go func() { + unamePassOpend := false branchName := gui.State.Branches[0].Name - if err := gui.GitCommand.Push(branchName, force); err != nil { - _ = gui.createErrorPanel(gui.g, err.Error()) - } else { - _ = gui.closeConfirmationPrompt(gui.g) - _ = gui.refreshSidePanels(gui.g) - } + err := gui.GitCommand.Push(branchName, force, func(passOrUname string) string { + unamePassOpend = true + return gui.waitForPassUname(g, v, passOrUname) + }) + gui.HandleCredentialsPopup(g, unamePassOpend, err) }() return nil } @@ -410,10 +414,10 @@ 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.GetCurrentBranchUpstreamDifferenceCount() if pullables == "?" || pullables == "0" { - return gui.pushWithForceFlag(v, false) + return gui.pushWithForceFlag(g, v, false) } err := gui.createConfirmationPanel(g, nil, gui.Tr.SLocalize("ForcePush"), gui.Tr.SLocalize("ForcePushPrompt"), func(g *gocui.Gui, v *gocui.View) error { - return gui.pushWithForceFlag(v, true) + return gui.pushWithForceFlag(g, v, true) }, nil) return err } |