From ea8373ed78113af57315ae4523d42dfed3a3b1fe Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 28 Mar 2026 19:58:37 +0000 Subject: network, internal/progress, format/packfile/ingest: Use WriteFlusher --- network/protocol/v0v1/server/session.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'network/protocol/v0v1/server/session.go') diff --git a/network/protocol/v0v1/server/session.go b/network/protocol/v0v1/server/session.go index ab79a7d7..0a4ecb53 100644 --- a/network/protocol/v0v1/server/session.go +++ b/network/protocol/v0v1/server/session.go @@ -3,6 +3,7 @@ package server import ( "io" + "codeberg.org/lindenii/furgit/common/iowrap" "codeberg.org/lindenii/furgit/network/protocol/pktline" "codeberg.org/lindenii/furgit/network/protocol/sideband64k" objectid "codeberg.org/lindenii/furgit/object/id" @@ -26,7 +27,7 @@ type Session struct { } // NewSession creates one v0/v1 server session over r and w. -func NewSession(r io.Reader, w pktline.WriteFlusher, opts Options) *Session { +func NewSession(r io.Reader, w iowrap.WriteFlusher, opts Options) *Session { return &Session{ dec: pktline.NewDecoder(r, pktline.ReadOptions{}), enc: pktline.NewEncoder(w), @@ -96,15 +97,31 @@ func (session *Session) FlushIO() error { return session.enc.FlushIO() } +type flushWriter struct { + writer io.Writer + flush func() error +} + +func (w flushWriter) Write(p []byte) (int, error) { + return w.writer.Write(p) +} + +func (w flushWriter) Flush() error { + return w.flush() +} + // ProgressWriter returns one chunking writer for sideband progress output. // // When side-band-64k was not negotiated, writes are discarded. -func (session *Session) ProgressWriter() io.Writer { +func (session *Session) ProgressWriter() iowrap.WriteFlusher { if !session.useSideBand { - return io.Discard + return iowrap.NopFlush(io.Discard) } - return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandProgress) + return flushWriter{ + writer: sideband64k.NewChunkWriter(session.sideband, sideband64k.BandProgress), + flush: session.sideband.FlushIO, + } } // ErrorWriter returns one chunking writer for sideband error output. -- cgit v1.3.1-10-gc9f91