diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go index deaeee042..af935b085 100644 --- a/pkg/tasks/tasks.go +++ b/pkg/tasks/tasks.go @@ -213,13 +213,15 @@ func (self *ViewBufferManager) StartLoading() { func (self *ViewBufferManager) ReadToEnd(then func()) { // The reading happens on the task's own goroutine, and the caller hears about - // it through then, so lazygit must not count as idle in between. + // it through then, so lazygit must not count as idle in between. The task is + // done only once then has returned, because then typically hands its work to + // the UI thread, and that work counts as busy only once it is enqueued. task := self.newGocuiTask() answered := func() { - task.Done() if then != nil { then() } + task.Done() } request := LinesToRead{Total: -1, InitialRefreshAfter: -1, Then: answered} diff --git a/pkg/tasks/tasks_test.go b/pkg/tasks/tasks_test.go index 2c2806b8e..6cc1cf9d6 100644 --- a/pkg/tasks/tasks_test.go +++ b/pkg/tasks/tasks_test.go @@ -541,9 +541,6 @@ func TestReadToEndHoldsItsTaskUntilThenReturns(t *testing.T) { var statusDuringThen gocui.TaskStatus manager.ReadToEnd(func() { statusDuringThen = task.Status() }) - /* EXPECTED: assert.Equal(t, gocui.TaskStatusBusy, statusDuringThen) - ACTUAL: */ - assert.Equal(t, gocui.TaskStatusDone, statusDuringThen) assert.Equal(t, gocui.TaskStatusDone, task.Status()) }