Skip to content

Fix the waiting status display for synchronous operations#5659

Merged
stefanhaller merged 2 commits into
masterfrom
fix-waiting-status-sync-rendering
May 30, 2026
Merged

Fix the waiting status display for synchronous operations#5659
stefanhaller merged 2 commits into
masterfrom
fix-waiting-status-sync-rendering

Conversation

@stefanhaller
Copy link
Copy Markdown
Collaborator

Commit 4f0393f caused a regression: for operations that use WithWaitingStatusSync (examples are squashing fixups, moving commits up or down, cherry-picking, creating fixup commits, and more), the waiting status wouldn't show during the operation; however, it would show after the operation was done, and then linger forever.

The cause: since 4f0393f, layout sizes the bottom line from the actual content of the AppStatus view rather than from the status manager. The async render path keeps the view in sync (it sets the buffer on the first tick and clears it to "" when the status ends), but the sync path used by WithWaitingStatusSync did not:

  • It called ForceLayoutAndRedraw before writing anything to the view, so layout saw an empty buffer and left no room; the status never appeared during the operation.
  • When the operation finished it just broke out of the loop, leaving the last spinner frame in the buffer. Every subsequent layout kept reserving room for that stale content, so the status stuck around forever.

Fix this by writing the status into the view before the initial layout, and clearing it again when stopping.

Commit 4f0393f caused a regression: for operations that use
WithWaitingStatusSync (examples are squashing fixups, moving commits up or down,
cherry-picking, creating fixup commits, and more), the waiting status wouldn't
show during the operation; however, it would show after the operation was done,
and then linger forever.

The cause: since 4f0393f, layout sizes the bottom line from the actual
content of the AppStatus view rather than from the status manager. The async
render path keeps the view in sync (it sets the buffer on the first tick and
clears it to "" when the status ends), but the sync path used by
WithWaitingStatusSync did not:

- It called ForceLayoutAndRedraw before writing anything to the view, so layout
  saw an empty buffer and left no room; the status never appeared during the
  operation.
- When the operation finished it just broke out of the loop, leaving the last
  spinner frame in the buffer. Every subsequent layout kept reserving room for
  that stale content, so the status stuck around forever.

Fix this by writing the status into the view before the initial layout, and
clearing it again when stopping.
@stefanhaller stefanhaller added the bug Something isn't working label May 30, 2026
@stefanhaller stefanhaller enabled auto-merge May 30, 2026 12:23
@stefanhaller stefanhaller merged commit 16cf2ff into master May 30, 2026
14 checks passed
@stefanhaller stefanhaller deleted the fix-waiting-status-sync-rendering branch May 30, 2026 12:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant