expose options related to caching

This commit is contained in:
lhchavez 2020-05-04 17:44:13 -07:00 committed by GitHub
commit 8b51d0db8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 84 additions and 0 deletions

View File

@ -18,10 +18,20 @@ int _go_git_opts_set_size_t(int opt, size_t val)
return git_libgit2_opts(opt, 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) int _go_git_opts_get_size_t(int opt, size_t *val)
{ {
return git_libgit2_opts(opt, 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 "C"
import ( import (
@ -75,6 +85,34 @@ func SetMwindowMappedLimit(size int) error {
return setSizet(C.GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size) 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() (current int, allowed int, err 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) { func getSizet(opt C.int) (int, error) {
runtime.LockOSThread() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()
@ -88,6 +126,19 @@ func getSizet(opt C.int) (int, error) {
return int(val), nil return int(val), nil
} }
func getSizetSizet(opt C.int) (int, int, error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
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)
}
return int(val1), int(val2), nil
}
func setSizet(opt C.int, val int) error { func setSizet(opt C.int, val int) error {
runtime.LockOSThread() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()

View File

@ -48,3 +48,36 @@ func TestMmapSizes(t *testing.T) {
t.Fatal("Sizes don't match") 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)
}