summaryrefslogtreecommitdiff
path: root/odb.go
diff options
context:
space:
mode:
Diffstat (limited to 'odb.go')
-rw-r--r--odb.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/odb.go b/odb.go
index 994ff2a..d313e3b 100644
--- a/odb.go
+++ b/odb.go
@@ -4,6 +4,7 @@ package git
#include <git2.h>
extern int git_odb_backend_one_pack(git_odb_backend **out, const char *index_file);
+extern int git_odb_backend_loose(git_odb_backend **out, const char *objects_dir, int compression_level, int do_fsync, unsigned int dir_mode, unsigned int file_mode);
extern int _go_git_odb_foreach(git_odb *db, void *payload);
extern void _go_git_odb_backend_free(git_odb_backend *backend);
extern int _go_git_odb_write_pack(git_odb_writepack **out, git_odb *db, void *progress_payload);
@@ -14,6 +15,7 @@ extern void _go_git_odb_writepack_free(git_odb_writepack *writepack);
import "C"
import (
"io"
+ "os"
"reflect"
"runtime"
"unsafe"
@@ -88,6 +90,27 @@ func NewOdbBackendOnePack(packfileIndexPath string) (backend *OdbBackend, err er
return NewOdbBackendFromC(unsafe.Pointer(odbOnePack)), nil
}
+// NewOdbBackendLoose creates a backend for loose objects.
+func NewOdbBackendLoose(objectsDir string, compressionLevel int, doFsync bool, dirMode os.FileMode, fileMode os.FileMode) (backend *OdbBackend, err error) {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ var odbLoose *C.git_odb_backend = nil
+ var doFsyncInt C.int
+ if doFsync {
+ doFsyncInt = C.int(1)
+ }
+
+ cstr := C.CString(objectsDir)
+ defer C.free(unsafe.Pointer(cstr))
+
+ ret := C.git_odb_backend_loose(&odbLoose, cstr, C.int(compressionLevel), doFsyncInt, C.uint(dirMode), C.uint(fileMode))
+ if ret < 0 {
+ return nil, MakeGitError(ret)
+ }
+ return NewOdbBackendFromC(unsafe.Pointer(odbLoose)), nil
+}
+
func (v *Odb) ReadHeader(oid *Oid) (uint64, ObjectType, error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()