From c37728bbad8f57288b68559da52ad57abb0141ff Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Fri, 20 Feb 2026 12:49:24 +0800 Subject: Revert "packed: Make packWriter implement Write directly instead of wrapping" This reverts commit 50cd7868cf055bce46e1a4253840089dfc602a11. --- packed_write_pack.go | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/packed_write_pack.go b/packed_write_pack.go index 329e2a7f..7e79b2ef 100644 --- a/packed_write_pack.go +++ b/packed_write_pack.go @@ -39,16 +39,6 @@ func newPackWriter(w io.Writer, algo hashAlgorithm, objCount uint32) (*packWrite }, nil } -func (pw *packWriter) Write(p []byte) (int, error) { - if pw == nil || !pw.wroteHeader { - return 0, ErrInvalidObject - } - if err := pw.writePacked(p); err != nil { - return 0, err - } - return len(p), nil -} - func (pw *packWriter) writePacked(p []byte) error { if len(p) == 0 { return nil @@ -104,7 +94,7 @@ func (pw *packWriter) WriteObject(ty ObjectType, body []byte) error { return err } - zw := zlib.NewWriter(pw) + zw := zlib.NewWriter(&packHashWriter{pw: pw}) if _, err := zw.Write(body); err != nil { _ = zw.Close() return err @@ -147,7 +137,7 @@ func (pw *packWriter) WriteOfsDelta(baseOffset uint64, baseSize, resultSize int, return err } - zw := zlib.NewWriter(pw) + zw := zlib.NewWriter(&packHashWriter{pw: pw}) if _, err := zw.Write(delta); err != nil { _ = zw.Close() return err @@ -185,7 +175,7 @@ func (pw *packWriter) WriteRefDelta(base Hash, baseSize, resultSize int, delta [ return err } - zw := zlib.NewWriter(pw) + zw := zlib.NewWriter(&packHashWriter{pw: pw}) if _, err := zw.Write(delta); err != nil { _ = zw.Close() return err @@ -207,6 +197,20 @@ func (pw *packWriter) Close() (Hash, error) { return out, nil } +type packHashWriter struct { + pw *packWriter +} + +func (w *packHashWriter) Write(p []byte) (int, error) { + if w == nil || w.pw == nil { + return 0, ErrInvalidObject + } + if err := w.pw.writePacked(p); err != nil { + return 0, err + } + return len(p), nil +} + // packHeaderEncode encodes a pack object header (type + size). func packHeaderEncode(ty ObjectType, size int) ([]byte, error) { if size < 0 { -- cgit v1.3.1-10-gc9f91