diff options
| -rw-r--r-- | packed_write_pack.go | 30 |
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 { |
