1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-05-29 23:17:32 +02:00

Fix race with PTYs in integration tests

In 8b8343b8a9f we made a change to run newPtyTask from AfterLayout; this is
needed so that the PTY gets the new, updated view size. However, this created a
race condition for integration tests that select a line in a list view and then
expect the main view to have certain content; sometimes that content gets
rendered too late.

I'm surprised that this didn't cause more tests to fail; right now I only know
of one test that occasionally fails because of this, which is stash/rename.go.

Fix this by moving the AfterLayout to inside newPtyTask, and do it only when we
are actually using a PTY (we don't when no pager is configured, which is the
case for integration tests).

The diff is best viewed with "ignore whitespace" turned on.
This commit is contained in:
Stefan Haller 2025-03-28 11:05:44 +01:00
parent d2d13449e4
commit 10f29bc6b4
2 changed files with 40 additions and 33 deletions

View File

@ -20,10 +20,7 @@ func (gui *Gui) runTaskForView(view *gocui.View, task types.UpdateTask) error {
return gui.newCmdTask(view, v.Cmd, v.Prefix)
case *types.RunPtyTask:
gui.afterLayout(func() error {
return gui.newPtyTask(view, v.Cmd, v.Prefix)
})
return nil
}
return nil

View File

@ -54,6 +54,13 @@ func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
return gui.newCmdTask(view, cmd, prefix)
}
// Run the pty after layout so that it gets the correct size
gui.afterLayout(func() error {
// Need to get the width and the pager again because the layout might have
// changed the size of the view
width = view.InnerWidth()
pager = gui.git.Config.GetPager(width)
cmdStr := strings.Join(cmd.Args, " ")
// This communicates to pagers that we're in a very simple
@ -91,6 +98,9 @@ func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
linesToRead := gui.linesToReadFromCmdTask(view)
return manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, onClose), cmdStr)
})
return nil
}
func removeExistingTermEnvVars(env []string) []string {