mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-31 23:19:40 +02:00
some fixes for issues around the credentials panel
This commit is contained in:
parent
c71bcc64ed
commit
a26c15dafa
@ -30,42 +30,33 @@ func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(s
|
|||||||
|
|
||||||
tty, err := pty.Start(cmd)
|
tty, err := pty.Start(cmd)
|
||||||
|
|
||||||
|
// go func() {
|
||||||
|
// _ = tty.Close()
|
||||||
|
// }()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
stopAsking := make(chan struct{})
|
|
||||||
|
|
||||||
var waitForBufio sync.WaitGroup
|
var waitForBufio sync.WaitGroup
|
||||||
waitForBufio.Add(1)
|
waitForBufio.Add(1)
|
||||||
|
|
||||||
defer func() {
|
|
||||||
_ = tty.Close()
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
scanner := bufio.NewScanner(tty)
|
scanner := bufio.NewScanner(tty)
|
||||||
scanner.Split(scanWordsWithNewLines)
|
scanner.Split(scanWordsWithNewLines)
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
select {
|
toOutput := strings.Trim(scanner.Text(), " ")
|
||||||
case <-stopAsking:
|
cmdOutput = append(cmdOutput, toOutput)
|
||||||
// just do nothing
|
toWrite := output(toOutput)
|
||||||
default:
|
if len(toWrite) > 0 {
|
||||||
toOutput := strings.Trim(scanner.Text(), " ")
|
_, _ = tty.Write([]byte(toWrite + "\n"))
|
||||||
cmdOutput = append(cmdOutput, toOutput)
|
|
||||||
toWrite := output(toOutput)
|
|
||||||
if len(toWrite) > 0 {
|
|
||||||
_, _ = tty.Write([]byte(toWrite + "\n"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waitForBufio.Done()
|
waitForBufio.Done()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
err = cmd.Wait()
|
err = cmd.Wait()
|
||||||
go func() {
|
tty.Close()
|
||||||
stopAsking <- struct{}{}
|
|
||||||
}()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
waitForBufio.Wait()
|
waitForBufio.Wait()
|
||||||
return strings.Join(cmdOutput, " "), err
|
return strings.Join(cmdOutput, " "), err
|
||||||
|
@ -103,7 +103,11 @@ func (gui *Gui) handlePushConfirm(g *gocui.Gui, v *gocui.View) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = gui.switchFocus(g, v, gui.getFilesView(g))
|
nextView, err := gui.g.View("confirmation")
|
||||||
|
if err != nil {
|
||||||
|
nextView = gui.getFilesView(g)
|
||||||
|
}
|
||||||
|
err = gui.switchFocus(g, nil, nextView)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -115,8 +119,9 @@ func (gui *Gui) handlePushClose(g *gocui.Gui, v *gocui.View) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
gui.credentials <- "-"
|
gui.credentials <- "-"
|
||||||
return gui.switchFocus(g, v, gui.getFilesView(g))
|
return gui.switchFocus(g, nil, gui.getFilesView(g))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handlePushFocused(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) handlePushFocused(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
@ -457,15 +457,19 @@ func (gui *Gui) fetch(g *gocui.Gui, v *gocui.View, canSskForCredentials bool) (u
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) updateLoader(g *gocui.Gui) error {
|
func (gui *Gui) updateLoader(g *gocui.Gui) error {
|
||||||
if view, _ := g.View("confirmation"); view != nil {
|
gui.g.Update(func(g *gocui.Gui) error {
|
||||||
content := gui.trimmedContent(view)
|
if view, _ := g.View("confirmation"); view != nil {
|
||||||
if strings.Contains(content, "...") {
|
content := gui.trimmedContent(view)
|
||||||
staticContent := strings.Split(content, "...")[0] + "..."
|
if strings.Contains(content, "...") {
|
||||||
if err := gui.renderString(g, "confirmation", staticContent+" "+utils.Loader()); err != nil {
|
staticContent := strings.Split(content, "...")[0] + "..."
|
||||||
return err
|
if err := gui.synchronousRenderString(g, "confirmation", staticContent+" "+utils.Loader()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,22 +222,26 @@ func (gui *Gui) focusPoint(cx int, cy int, v *gocui.View) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) synchronousRenderString(g *gocui.Gui, viewName, s string) error {
|
||||||
|
v, err := g.View(viewName)
|
||||||
|
// just in case the view disappeared as this function was called, we'll
|
||||||
|
// silently return if it's not found
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
v.Clear()
|
||||||
|
if err := v.SetOrigin(0, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
output := string(bom.Clean([]byte(s)))
|
||||||
|
output = utils.NormalizeLinefeeds(output)
|
||||||
|
fmt.Fprint(v, output)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error {
|
func (gui *Gui) renderString(g *gocui.Gui, viewName, s string) error {
|
||||||
g.Update(func(*gocui.Gui) error {
|
g.Update(func(*gocui.Gui) error {
|
||||||
v, err := g.View(viewName)
|
return gui.synchronousRenderString(gui.g, viewName, s)
|
||||||
// just in case the view disappeared as this function was called, we'll
|
|
||||||
// silently return if it's not found
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
v.Clear()
|
|
||||||
if err := v.SetOrigin(0, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
output := string(bom.Clean([]byte(s)))
|
|
||||||
output = utils.NormalizeLinefeeds(output)
|
|
||||||
fmt.Fprint(v, output)
|
|
||||||
return nil
|
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -311,19 +315,16 @@ func (gui *Gui) resizeCurrentPopupPanel(g *gocui.Gui) error {
|
|||||||
|
|
||||||
// HandleCredentialsPopup handles the views after executing a command that might ask for credentials
|
// HandleCredentialsPopup handles the views after executing a command that might ask for credentials
|
||||||
func (gui *Gui) HandleCredentialsPopup(g *gocui.Gui, popupOpened bool, cmdErr error) {
|
func (gui *Gui) HandleCredentialsPopup(g *gocui.Gui, popupOpened bool, cmdErr error) {
|
||||||
|
if popupOpened {
|
||||||
|
_ = g.DeleteView("credentials")
|
||||||
|
}
|
||||||
if cmdErr != nil {
|
if cmdErr != nil {
|
||||||
errMessage := cmdErr.Error()
|
errMessage := cmdErr.Error()
|
||||||
if errMessage == "exit status 128" {
|
if errMessage == "exit status 128" {
|
||||||
errMessage = gui.Tr.SLocalize("PassUnameWrong")
|
errMessage = gui.Tr.SLocalize("PassUnameWrong")
|
||||||
}
|
}
|
||||||
_ = gui.createErrorPanel(g, errMessage)
|
_ = gui.createErrorPanel(g, errMessage)
|
||||||
if popupOpened {
|
|
||||||
_ = g.DeleteView("credentials")
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if popupOpened {
|
|
||||||
_ = g.DeleteView("credentials")
|
|
||||||
}
|
|
||||||
_ = gui.closeConfirmationPrompt(g)
|
_ = gui.closeConfirmationPrompt(g)
|
||||||
_ = gui.refreshSidePanels(g)
|
_ = gui.refreshSidePanels(g)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user