Separate reading a fixed number of lines from reading to the end

ReadToEnd holds a gocui task while it reads, so that lazygit doesn't count as
idle while something waits on the result. That has nothing to do with reading
all the way to the end, and the next commit needs it for a bounded read too, so
the two are pulled apart.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Haller
2026-10-01 16:56:57 +02:00
co-authored by Claude Opus 5
parent a0b9ca978c
commit 81c27b2ff8
+8 -3
View File
@@ -212,8 +212,13 @@ 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.
self.readHoldingATask(-1, then)
}
// readHoldingATask asks the task to have read totalLines lines in total (-1 for all of
// them) and calls then once it has. The reading happens on the task's own goroutine and
// the caller is waiting on the result, so lazygit must not count as idle in between.
func (self *ViewBufferManager) readHoldingATask(totalLines int, then func()) {
task := self.newGocuiTask()
answered := func() {
task.Done()
@@ -222,7 +227,7 @@ func (self *ViewBufferManager) ReadToEnd(then func()) {
}
}
request := LinesToRead{Total: -1, InitialRefreshAfter: -1, Then: answered}
request := LinesToRead{Total: totalLines, InitialRefreshAfter: -1, Then: answered}
if !self.readRequests.enqueue(request) {
// With no task reading, everything there is to read has been read.
answered()