From 512f37b369cc8fd6c9594fc06546ad7a4ab423d6 Mon Sep 17 00:00:00 2001 From: Vladimir Buzuev Date: Fri, 3 Apr 2020 11:51:20 -0700 Subject: [PATCH] expose options related to caching --- settings.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/settings.go b/settings.go index b9bc216..8bbdda0 100644 --- a/settings.go +++ b/settings.go @@ -18,10 +18,20 @@ int _go_git_opts_set_size_t(int opt, size_t val) return git_libgit2_opts(opt, val); } +int _go_git_opts_set_cache_object_limit(git_object_t type, size_t size) +{ + return git_libgit2_opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, type, size); +} + int _go_git_opts_get_size_t(int opt, size_t *val) { return git_libgit2_opts(opt, val); } + +int _go_git_opts_get_size_t_size_t(int opt, size_t *val1, size_t *val2) +{ + return git_libgit2_opts(opt, val1, val2); +} */ import "C" import ( @@ -75,6 +85,34 @@ func SetMwindowMappedLimit(size int) error { return setSizet(C.GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size) } +func EnableCaching(enabled bool) error { + if enabled { + return setSizet(C.GIT_OPT_ENABLE_CACHING, 1) + } else { + return setSizet(C.GIT_OPT_ENABLE_CACHING, 0) + } +} + +func GetCachedMemory() (int, int, error) { + return getSizetSizet(C.GIT_OPT_GET_CACHED_MEMORY) +} + +func SetCacheMaxSize(maxSize int) error { + return setSizet(C.GIT_OPT_SET_CACHE_MAX_SIZE, maxSize) +} + +func SetCacheObjectLimit(objectType ObjectType, size int) error { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + err := C._go_git_opts_set_cache_object_limit(C.git_object_t(objectType), C.size_t(size)) + if err < 0 { + return MakeGitError(err) + } + + return nil +} + func getSizet(opt C.int) (int, error) { runtime.LockOSThread() defer runtime.UnlockOSThread() @@ -88,6 +126,20 @@ func getSizet(opt C.int) (int, error) { return int(val), nil } +func getSizetSizet(opt C.int) (int, int, error) { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + var val1 C.size_t + var val2 C.size_t + err := C._go_git_opts_get_size_t_size_t(opt, &val1, &val2) + if err < 0 { + return 0, 0, MakeGitError(err) + } + + return int(val1), int(val2), nil +} + func setSizet(opt C.int, val int) error { runtime.LockOSThread() defer runtime.UnlockOSThread()