summaryrefslogtreecommitdiff
path: root/odb_test.go
diff options
context:
space:
mode:
authorlhchavez <[email protected]>2018-12-23 03:25:52 +0000
committerlhchavez <[email protected]>2020-02-23 13:20:13 -0800
commit91946a570500bc441be0aea4603a5c83f81e22a4 (patch)
tree23c0f1b135856f5a33225c0dafbf88d92551c248 /odb_test.go
parent05bc5e36ff93eb2195480c5cad91e6c5c44cd128 (diff)
Add odb.NewOdbBackendLoose()
This change adds support for odb.NewOdbBackendLoose(). This, together with the git.Packbuilder, can do what Mempack does with a lot less memory.
Diffstat (limited to 'odb_test.go')
-rw-r--r--odb_test.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/odb_test.go b/odb_test.go
index e44c927..d79afa1 100644
--- a/odb_test.go
+++ b/odb_test.go
@@ -3,8 +3,11 @@ package git
import (
"bytes"
"errors"
+ "fmt"
"io"
"io/ioutil"
+ "os"
+ "path"
"testing"
)
@@ -186,3 +189,47 @@ func TestOdbWritepack(t *testing.T) {
t.Errorf("mismatched indexed objects, expected 3, got %v", finalStats.IndexedObjects)
}
}
+
+func TestOdbBackendLoose(t *testing.T) {
+ t.Parallel()
+ repo := createTestRepo(t)
+ defer cleanupTestRepo(t, repo)
+
+ _, _ = seedTestRepo(t, repo)
+
+ odb, err := repo.Odb()
+ checkFatal(t, err)
+
+ looseObjectsDir, err := ioutil.TempDir("", fmt.Sprintf("loose_objects_%s", path.Base(repo.Path())))
+ checkFatal(t, err)
+ defer os.RemoveAll(looseObjectsDir)
+
+ looseObjectsBackend, err := NewOdbBackendLoose(looseObjectsDir, -1, false, 0, 0)
+ checkFatal(t, err)
+ if err := odb.AddBackend(looseObjectsBackend, 999); err != nil {
+ looseObjectsBackend.Free()
+ checkFatal(t, err)
+ }
+
+ str := "hello, world!"
+
+ writeStream, err := odb.NewWriteStream(int64(len(str)), ObjectBlob)
+ checkFatal(t, err)
+ n, err := io.WriteString(writeStream, str)
+ checkFatal(t, err)
+ if n != len(str) {
+ t.Fatalf("Bad write length %v != %v", n, len(str))
+ }
+
+ err = writeStream.Close()
+ checkFatal(t, err)
+
+ expectedId, err := NewOid("30f51a3fba5274d53522d0f19748456974647b4f")
+ checkFatal(t, err)
+ if !writeStream.Id.Equal(expectedId) {
+ t.Fatalf("writeStream.id = %v; want %v", writeStream.Id, expectedId)
+ }
+
+ _, err = os.Stat(path.Join(looseObjectsDir, expectedId.String()[:2], expectedId.String()[2:]))
+ checkFatal(t, err)
+}