expose options related to caching
This commit is contained in:
commit
8b51d0db8e
51
settings.go
51
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() (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) {
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
@ -88,6 +126,19 @@ 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, 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()
|
||||
|
|
|
@ -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)
|
||||
}
|
Loading…
Reference in New Issue