Files
ngit-grasp/tests
DanConwayDev 8abd2f4fb5 fix(http): keep long push finalization alive
The readiness fix in cb7e5ae0 deliberately withholds receive-pack's terminal
flush until process_newly_available_git_data has promoted events, copied any
required objects, aligned owner repositories, and notified subscribers.
Complex multi-owner finalization can itself exceed ngit's 15-second per-recv
I/O timeout even though the server is still making healthy progress.

This is distinct from the large-pack failure behind f4828c63: that timeout
occurred inside git-receive-pack while Git resolved deltas and checked
connectivity. Streaming Git stdout continues to cover that phase. This change
covers the post-Git GRASP finalization phase introduced by the corrected
completion boundary.

When the client negotiated side-band-64k and a terminal flush is being held,
send a valid band-2 progress pkt-line every five seconds. Stop and join the
keepalive task before releasing the flush so no progress can race past the
protocol boundary. Do not invent packets for non-sideband clients.

The regression blocks purgatory promotion past the keepalive interval and
proves progress arrives while the announcement is unavailable, then verifies
the promoted event is queryable before the final flush. Unit coverage pins the
pkt-line framing and band identifier.

Depends-on: cb7e5ae0f9
Original-streaming-fix: f4828c6393
Timeout-issue: 497c8ae1554037142e366f9ba363ba898fc16e90198fded195b9a45adb6f38c7
2026-07-26 02:26:51 +01:00
..