aboutsummaryrefslogtreecommitdiff
path: root/repository
diff options
context:
space:
mode:
Diffstat (limited to 'repository')
-rw-r--r--repository/write_loose.go32
-rw-r--r--repository/write_loose_test.go43
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)
}
})
}