diff options
| author | lhchavez <[email protected]> | 2018-12-23 03:25:52 +0000 |
|---|---|---|
| committer | lhchavez <[email protected]> | 2020-02-23 13:20:13 -0800 |
| commit | 91946a570500bc441be0aea4603a5c83f81e22a4 (patch) | |
| tree | 23c0f1b135856f5a33225c0dafbf88d92551c248 /odb.go | |
| parent | 05bc5e36ff93eb2195480c5cad91e6c5c44cd128 (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.go')
| -rw-r--r-- | odb.go | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -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() |
