From 512f37b369cc8fd6c9594fc06546ad7a4ab423d6 Mon Sep 17 00:00:00 2001 From: Vladimir Buzuev Date: Fri, 3 Apr 2020 11:51:20 -0700 Subject: 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() -- cgit v1.2.3 From 862cde393cca25fdf04b883aa331a88a3fec67a7 Mon Sep 17 00:00:00 2001 From: Vladimir Buzuev Date: Mon, 4 May 2020 11:01:38 -0700 Subject: cache_opts: address PR comments --- settings.go | 15 +++++++-------- settings_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/settings.go b/settings.go index 8bbdda0..c6dfe1c 100644 --- a/settings.go +++ b/settings.go @@ -86,14 +86,14 @@ func SetMwindowMappedLimit(size int) error { } func EnableCaching(enabled bool) error { - if enabled { - return setSizet(C.GIT_OPT_ENABLE_CACHING, 1) - } else { - return setSizet(C.GIT_OPT_ENABLE_CACHING, 0) - } + if enabled { + return setSizet(C.GIT_OPT_ENABLE_CACHING, 1) + } else { + return setSizet(C.GIT_OPT_ENABLE_CACHING, 0) + } } -func GetCachedMemory() (int, int, error) { +func GetCachedMemory() (current int, allowed int, err error) { return getSizetSizet(C.GIT_OPT_GET_CACHED_MEMORY) } @@ -130,8 +130,7 @@ func getSizetSizet(opt C.int) (int, int, error) { runtime.LockOSThread() defer runtime.UnlockOSThread() - var val1 C.size_t - var val2 C.size_t + var val1, 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) diff --git a/settings_test.go b/settings_test.go index 3a4ce0a..4e45567 100644 --- a/settings_test.go +++ b/settings_test.go @@ -48,3 +48,36 @@ func TestMmapSizes(t *testing.T) { t.Fatal("Sizes don't match") } } + +func TestEnableCaching(t *testing.T) { + err := EnableCaching(false) + checkFatal(t, err) + + err = EnableCaching(true) + checkFatal(t, err) +} + +func TestGetCachedMemory(t *testing.T) { + current, allowed, err := GetCachedMemory() + checkFatal(t, err) + + if current < 0 { + t.Fatal("current < 0") + } + + if allowed < 0 { + t.Fatal("allowed < 0") + } +} + +func TestSetCacheMaxSize(t *testing.T) { + err := SetCacheMaxSize(0) + checkFatal(t, err) + + err = SetCacheMaxSize(1024 * 1024) + checkFatal(t, err) + + // revert to default 256MB + err = SetCacheMaxSize(256 * 1024 * 1024) + checkFatal(t, err) +} \ No newline at end of file -- cgit v1.2.3