aboutsummaryrefslogtreecommitdiff
path: root/packed_write_pack.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-01-29 21:37:25 +0100
committerGravatar Runxi Yu2026-01-29 21:37:25 +0100
commit50cd7868cf055bce46e1a4253840089dfc602a11 (patch)
treec16683fd087ea02f7f39996c12962cd152caa672 /packed_write_pack.go
parenthash: Make streaming hashes possible (diff)
signatureNo signature
packed: Make packWriter implement Write directly instead of wrapping
Diffstat (limited to 'packed_write_pack.go')
-rw-r--r--packed_write_pack.go30
1 files changed, 13 insertions, 17 deletions
diff --git a/packed_write_pack.go b/packed_write_pack.go
index 7e79b2ef..329e2a7f 100644
--- a/packed_write_pack.go
+++ b/packed_write_pack.go
@@ -39,6 +39,16 @@ 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
@@ -94,7 +104,7 @@ func (pw *packWriter) WriteObject(ty ObjectType, body []byte) error {
return err
}
- zw := zlib.NewWriter(&packHashWriter{pw: pw})
+ zw := zlib.NewWriter(pw)
if _, err := zw.Write(body); err != nil {
_ = zw.Close()
return err
@@ -137,7 +147,7 @@ func (pw *packWriter) WriteOfsDelta(baseOffset uint64, baseSize, resultSize int,
return err
}
- zw := zlib.NewWriter(&packHashWriter{pw: pw})
+ zw := zlib.NewWriter(pw)
if _, err := zw.Write(delta); err != nil {
_ = zw.Close()
return err
@@ -175,7 +185,7 @@ func (pw *packWriter) WriteRefDelta(base Hash, baseSize, resultSize int, delta [
return err
}
- zw := zlib.NewWriter(&packHashWriter{pw: pw})
+ zw := zlib.NewWriter(pw)
if _, err := zw.Write(delta); err != nil {
_ = zw.Close()
return err
@@ -197,20 +207,6 @@ 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 {