diff options
| author | 2026-03-28 19:58:37 +0000 | |
|---|---|---|
| committer | 2026-03-28 19:58:37 +0000 | |
| commit | ea8373ed78113af57315ae4523d42dfed3a3b1fe (patch) | |
| tree | 835f98905046a8e5564cf6057af450fe03035444 /network/protocol/v0v1/server/session.go | |
| parent | common/iowrap: Add io wrappers (diff) | |
| signature | No signature | |
network, internal/progress, format/packfile/ingest: Use WriteFlusher
Diffstat (limited to 'network/protocol/v0v1/server/session.go')
| -rw-r--r-- | network/protocol/v0v1/server/session.go | 25 |
1 files changed, 21 insertions, 4 deletions
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. |
