aboutsummaryrefslogtreecommitdiff
path: root/network/protocol/v0v1/server
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-28 19:58:37 +0000
committerGravatar Runxi Yu2026-03-28 19:58:37 +0000
commitea8373ed78113af57315ae4523d42dfed3a3b1fe (patch)
tree835f98905046a8e5564cf6057af450fe03035444 /network/protocol/v0v1/server
parentcommon/iowrap: Add io wrappers (diff)
signatureNo signature
network, internal/progress, format/packfile/ingest: Use WriteFlusher
Diffstat (limited to 'network/protocol/v0v1/server')
-rw-r--r--network/protocol/v0v1/server/receivepack/session.go3
-rw-r--r--network/protocol/v0v1/server/session.go25
2 files changed, 23 insertions, 5 deletions
diff --git a/network/protocol/v0v1/server/receivepack/session.go b/network/protocol/v0v1/server/receivepack/session.go
index 55019714..d7b2a7c5 100644
--- a/network/protocol/v0v1/server/receivepack/session.go
+++ b/network/protocol/v0v1/server/receivepack/session.go
@@ -5,6 +5,7 @@ import (
"io"
"strings"
+ "codeberg.org/lindenii/furgit/common/iowrap"
common "codeberg.org/lindenii/furgit/network/protocol/v0v1/server"
objectid "codeberg.org/lindenii/furgit/object/id"
)
@@ -168,7 +169,7 @@ func (session *Session) WriteProgress(p []byte) error {
// 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 {
return session.base.ProgressWriter()
}
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.