diff options
| author | 2026-02-21 13:38:02 +0800 | |
|---|---|---|
| committer | 2026-02-21 14:28:15 +0800 | |
| commit | 94482cb2c97aa215f83940643c5d4c0933727dcb (patch) | |
| tree | bee22fa113542abd1b863ee251fdcf0f9bd409b5 /objectstore/loose/write_writer.go | |
| parent | diff: Add package-level doc comment (diff) | |
| signature | No signature | |
*: Modernize and lint; add CI v0.1.17
Diffstat (limited to 'objectstore/loose/write_writer.go')
| -rw-r--r-- | objectstore/loose/write_writer.go | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/objectstore/loose/write_writer.go b/objectstore/loose/write_writer.go index abbbae31..e8f03f19 100644 --- a/objectstore/loose/write_writer.go +++ b/objectstore/loose/write_writer.go @@ -137,48 +137,6 @@ func (writer *streamWriter) Write(src []byte) (int, error) { return len(src), nil } -// acceptFull validates and accounts raw full-object input. -func (writer *streamWriter) acceptFull(src []byte) error { - if !writer.headerDone { - if nul := bytes.IndexByte(src, 0); nul >= 0 { - headerChunkLen := nul + 1 - writer.headerBuf = append(writer.headerBuf, src[:headerChunkLen]...) - _, size, _, ok := objectheader.Parse(writer.headerBuf) - if !ok { - return errors.New("objectstore/loose: malformed object header") - } - writer.headerDone = true - writer.expectedContentLeft = size - return writer.acceptContent(int64(len(src) - headerChunkLen)) - } - - writer.headerBuf = append(writer.headerBuf, src...) - return nil - } - - return writer.acceptContent(int64(len(src))) -} - -// acceptContent validates and accounts content byte counts. -func (writer *streamWriter) acceptContent(n int64) error { - if n > writer.expectedContentLeft { - return errors.New("objectstore/loose: object content exceeds declared size") - } - writer.expectedContentLeft -= n - return nil -} - -// writeRawChunk forwards raw bytes to the hash and deflate pipeline. -func (writer *streamWriter) writeRawChunk(src []byte) error { - if _, err := writer.hash.Write(src); err != nil { - return err - } - if _, err := writer.zw.Write(src); err != nil { - return err - } - return nil -} - // Close flushes and closes the underlying zlib stream and temp file. // It is safe to call multiple times. func (writer *streamWriter) Close() error { @@ -263,6 +221,48 @@ func (writer *streamWriter) Finalize() (objectid.ObjectID, error) { return id, nil } +// acceptFull validates and accounts raw full-object input. +func (writer *streamWriter) acceptFull(src []byte) error { + if !writer.headerDone { + if nul := bytes.IndexByte(src, 0); nul >= 0 { + headerChunkLen := nul + 1 + writer.headerBuf = append(writer.headerBuf, src[:headerChunkLen]...) + _, size, _, ok := objectheader.Parse(writer.headerBuf) + if !ok { + return errors.New("objectstore/loose: malformed object header") + } + writer.headerDone = true + writer.expectedContentLeft = size + return writer.acceptContent(int64(len(src) - headerChunkLen)) + } + + writer.headerBuf = append(writer.headerBuf, src...) + return nil + } + + return writer.acceptContent(int64(len(src))) +} + +// acceptContent validates and accounts content byte counts. +func (writer *streamWriter) acceptContent(n int64) error { + if n > writer.expectedContentLeft { + return errors.New("objectstore/loose: object content exceeds declared size") + } + writer.expectedContentLeft -= n + return nil +} + +// writeRawChunk forwards raw bytes to the hash and deflate pipeline. +func (writer *streamWriter) writeRawChunk(src []byte) error { + if _, err := writer.hash.Write(src); err != nil { + return err + } + if _, err := writer.zw.Write(src); err != nil { + return err + } + return nil +} + // createTempObjectFile creates a unique temporary object file within dir. // The returned path is relative to the objects root. func (store *Store) createTempObjectFile(dir string) (string, *os.File, error) { |
