From 91946a570500bc441be0aea4603a5c83f81e22a4 Mon Sep 17 00:00:00 2001 From: lhchavez Date: Sun, 23 Dec 2018 03:25:52 +0000 Subject: 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. --- odb_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'odb_test.go') 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) +} -- cgit v1.2.3