aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-20 12:49:24 +0800
committerGravatar Runxi Yu2026-02-20 12:57:31 +0800
commitc37728bbad8f57288b68559da52ad57abb0141ff (patch)
tree4d8de10af26bb559e8d1f92fedb5860e072fad75
parentRevert "README: commit-graph is in-progress" (diff)
signatureNo signature
Revert "packed: Make packWriter implement Write directly instead of wrapping"
This reverts commit 50cd7868cf055bce46e1a4253840089dfc602a11.
-rw-r--r--packed_write_pack.go30
1 files 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 {