diff options
| author | 2026-02-21 03:46:50 +0800 | |
|---|---|---|
| committer | 2026-02-21 03:46:50 +0800 | |
| commit | 27ee98e7a9a8693db59e755739e10c1c1ba852b4 (patch) | |
| tree | 2b69d6912851d36b06c0a795391120d204605ffe /objectstore/loose/read_header.go | |
| parent | objectstore: ReadReaderContent should have an advisory declared length (diff) | |
| signature | No signature | |
objectstore/loose: Add loose backend
Diffstat (limited to 'objectstore/loose/read_header.go')
| -rw-r--r-- | objectstore/loose/read_header.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/objectstore/loose/read_header.go b/objectstore/loose/read_header.go new file mode 100644 index 00000000..0fa587fc --- /dev/null +++ b/objectstore/loose/read_header.go @@ -0,0 +1,30 @@ +package loose + +import ( + "bufio" + "compress/zlib" + + "codeberg.org/lindenii/furgit/objectid" + "codeberg.org/lindenii/furgit/objecttype" +) + +// ReadHeader reads an object's type and declared content length. +func (store *Store) ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error) { + file, err := store.openObject(id) + if err != nil { + return objecttype.TypeInvalid, 0, err + } + defer func() { _ = file.Close() }() + + zr, err := zlib.NewReader(file) + if err != nil { + return objecttype.TypeInvalid, 0, err + } + defer func() { _ = zr.Close() }() + + ty, size, err := readHeader(bufio.NewReader(zr)) + if err != nil { + return objecttype.TypeInvalid, 0, err + } + return ty, size, nil +} |
