diff options
| author | 2026-02-21 17:49:18 +0800 | |
|---|---|---|
| committer | 2026-02-21 17:49:18 +0800 | |
| commit | 3ecd35180fa8cb842589e28744fed7d130120dc1 (patch) | |
| tree | 066c034bd5cf51aa26e8a1a63348c255ccc794ad /repository | |
| parent | objectstore/packed: Fix ReadHeader to return resolved delta object size (diff) | |
| signature | No signature | |
objectstore/loose, repository: Use a Reader-based API v0.1.22
Diffstat (limited to 'repository')
| -rw-r--r-- | repository/write_loose.go | 32 | ||||
| -rw-r--r-- | repository/write_loose_test.go | 43 |
2 files changed, 24 insertions, 51 deletions
diff --git a/repository/write_loose.go b/repository/write_loose.go index c9f42fea..adebb2f6 100644 --- a/repository/write_loose.go +++ b/repository/write_loose.go @@ -1,6 +1,7 @@ package repository import ( + "bytes" "fmt" "io" @@ -10,7 +11,7 @@ import ( // WriteLooseBytesFull writes one loose object from raw "type size\0content". func (repo *Repository) WriteLooseBytesFull(raw []byte) (objectid.ObjectID, error) { - id, err := repo.objectsLooseForWritingOnly.WriteBytesFull(raw) + id, err := repo.objectsLooseForWritingOnly.WriteReaderFull(bytes.NewReader(raw)) if err != nil { return objectid.ObjectID{}, fmt.Errorf("repository: write loose full bytes: %w", err) } @@ -19,32 +20,29 @@ func (repo *Repository) WriteLooseBytesFull(raw []byte) (objectid.ObjectID, erro // WriteLooseBytesContent writes one loose object from typed content bytes. func (repo *Repository) WriteLooseBytesContent(ty objecttype.Type, content []byte) (objectid.ObjectID, error) { - id, err := repo.objectsLooseForWritingOnly.WriteBytesContent(ty, content) + id, err := repo.objectsLooseForWritingOnly.WriteReaderContent(ty, int64(len(content)), bytes.NewReader(content)) if err != nil { return objectid.ObjectID{}, fmt.Errorf("repository: write loose content bytes: %w", err) } return id, nil } -// WriteLooseWriterFull returns a writer for one full serialized object stream. -// -// The caller must close the writer, then call finalize to publish the object. -func (repo *Repository) WriteLooseWriterFull() (io.WriteCloser, func() (objectid.ObjectID, error), error) { - writer, finalize, err := repo.objectsLooseForWritingOnly.WriteWriterFull() +// WriteLooseReaderFull writes one loose object from raw bytes +// "type size\0content" read from src. +func (repo *Repository) WriteLooseReaderFull(src io.Reader) (objectid.ObjectID, error) { + id, err := repo.objectsLooseForWritingOnly.WriteReaderFull(src) if err != nil { - return nil, nil, fmt.Errorf("repository: create loose full writer: %w", err) + return objectid.ObjectID{}, fmt.Errorf("repository: write loose full reader: %w", err) } - return writer, finalize, nil + return id, nil } -// WriteLooseWriterContent returns a writer for one typed object content stream. -// -// The caller must write exactly size bytes, close the writer, then call -// finalize to publish the object. -func (repo *Repository) WriteLooseWriterContent(ty objecttype.Type, size int64) (io.WriteCloser, func() (objectid.ObjectID, error), error) { - writer, finalize, err := repo.objectsLooseForWritingOnly.WriteWriterContent(ty, size) +// WriteLooseReaderContent writes one loose object from typed content bytes read +// from src. src must provide exactly size bytes. +func (repo *Repository) WriteLooseReaderContent(ty objecttype.Type, size int64, src io.Reader) (objectid.ObjectID, error) { + id, err := repo.objectsLooseForWritingOnly.WriteReaderContent(ty, size, src) if err != nil { - return nil, nil, fmt.Errorf("repository: create loose content writer: %w", err) + return objectid.ObjectID{}, fmt.Errorf("repository: write loose content reader: %w", err) } - return writer, finalize, nil + return id, nil } diff --git a/repository/write_loose_test.go b/repository/write_loose_test.go index a09cbbde..aae118e2 100644 --- a/repository/write_loose_test.go +++ b/repository/write_loose_test.go @@ -2,7 +2,6 @@ package repository_test import ( "bytes" - "io" "testing" "codeberg.org/lindenii/furgit/internal/testgit" @@ -51,7 +50,7 @@ func TestWriteLooseBytesContent(t *testing.T) { }) } -func TestWriteLooseWriterContent(t *testing.T) { +func TestWriteLooseReaderContent(t *testing.T) { t.Parallel() testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper @@ -67,29 +66,15 @@ func TestWriteLooseWriterContent(t *testing.T) { } defer func() { _ = repo.Close() }() - content := []byte("write-loose-writer-content\n") - writer, finalize, err := repo.WriteLooseWriterContent(objecttype.TypeBlob, int64(len(content))) + content := []byte("write-loose-reader-content\n") + gotID, err := repo.WriteLooseReaderContent(objecttype.TypeBlob, int64(len(content)), bytes.NewReader(content)) if err != nil { - t.Fatalf("WriteLooseWriterContent: %v", err) - } - - if _, err := writer.Write(content[:6]); err != nil { - t.Fatalf("WriteLooseWriterContent first write: %v", err) - } - if _, err := writer.Write(content[6:]); err != nil { - t.Fatalf("WriteLooseWriterContent second write: %v", err) - } - if err := writer.Close(); err != nil { - t.Fatalf("WriteLooseWriterContent close: %v", err) - } - gotID, err := finalize() - if err != nil { - t.Fatalf("WriteLooseWriterContent finalize: %v", err) + t.Fatalf("WriteLooseReaderContent: %v", err) } wantID := repoHarness.HashObject(t, "blob", content) if gotID != wantID { - t.Fatalf("WriteLooseWriterContent id = %s, want %s", gotID, wantID) + t.Fatalf("WriteLooseReaderContent id = %s, want %s", gotID, wantID) } }) } @@ -124,22 +109,12 @@ func TestWriteLooseFull(t *testing.T) { t.Fatalf("WriteLooseBytesFull id = %s, want %s", idFromBytes, commitID) } - writer, finalize, err := repo.WriteLooseWriterFull() - if err != nil { - t.Fatalf("WriteLooseWriterFull: %v", err) - } - if _, err := io.Copy(writer, bytes.NewReader(raw)); err != nil { - t.Fatalf("WriteLooseWriterFull copy: %v", err) - } - if err := writer.Close(); err != nil { - t.Fatalf("WriteLooseWriterFull close: %v", err) - } - idFromWriter, err := finalize() + idFromReader, err := repo.WriteLooseReaderFull(bytes.NewReader(raw)) if err != nil { - t.Fatalf("WriteLooseWriterFull finalize: %v", err) + t.Fatalf("WriteLooseReaderFull: %v", err) } - if idFromWriter != commitID { - t.Fatalf("WriteLooseWriterFull id = %s, want %s", idFromWriter, commitID) + if idFromReader != commitID { + t.Fatalf("WriteLooseReaderFull id = %s, want %s", idFromReader, commitID) } }) } |
