shithub: furgit

Download patch

ref: c37728bbad8f57288b68559da52ad57abb0141ff
parent: a6438b7832a18a5b4d5357e81816d9406ac92cf6
author: Runxi Yu <me@runxiyu.org>
date: Fri Feb 20 07:49:24 EST 2026

Revert "packed: Make packWriter implement Write directly instead of wrapping"

This reverts commit 50cd7868cf055bce46e1a4253840089dfc602a11.

--- a/packed_write_pack.go
+++ b/packed_write_pack.go
@@ -39,16 +39,6 @@
 	}, 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 @@
 		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 @@
 		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 @@
 		return err
 	}
 
-	zw := zlib.NewWriter(pw)
+	zw := zlib.NewWriter(&packHashWriter{pw: pw})
 	if _, err := zw.Write(delta); err != nil {
 		_ = zw.Close()
 		return err
@@ -205,6 +195,20 @@
 	copy(out.data[:], sum)
 	out.algo = pw.algo
 	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).
--