Skip to content

Commit 8b51d0d

Browse files
authored
expose options related to caching
2 parents 91d0845 + 862cde3 commit 8b51d0d

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

settings.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,20 @@ int _go_git_opts_set_size_t(int opt, size_t val)
1818
return git_libgit2_opts(opt, val);
1919
}
2020
21+
int _go_git_opts_set_cache_object_limit(git_object_t type, size_t size)
22+
{
23+
return git_libgit2_opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, type, size);
24+
}
25+
2126
int _go_git_opts_get_size_t(int opt, size_t *val)
2227
{
2328
return git_libgit2_opts(opt, val);
2429
}
30+
31+
int _go_git_opts_get_size_t_size_t(int opt, size_t *val1, size_t *val2)
32+
{
33+
return git_libgit2_opts(opt, val1, val2);
34+
}
2535
*/
2636
import "C"
2737
import (
@@ -75,6 +85,34 @@ func SetMwindowMappedLimit(size int) error {
7585
return setSizet(C.GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size)
7686
}
7787

88+
func EnableCaching(enabled bool) error {
89+
if enabled {
90+
return setSizet(C.GIT_OPT_ENABLE_CACHING, 1)
91+
} else {
92+
return setSizet(C.GIT_OPT_ENABLE_CACHING, 0)
93+
}
94+
}
95+
96+
func GetCachedMemory() (current int, allowed int, err error) {
97+
return getSizetSizet(C.GIT_OPT_GET_CACHED_MEMORY)
98+
}
99+
100+
func SetCacheMaxSize(maxSize int) error {
101+
return setSizet(C.GIT_OPT_SET_CACHE_MAX_SIZE, maxSize)
102+
}
103+
104+
func SetCacheObjectLimit(objectType ObjectType, size int) error {
105+
runtime.LockOSThread()
106+
defer runtime.UnlockOSThread()
107+
108+
err := C._go_git_opts_set_cache_object_limit(C.git_object_t(objectType), C.size_t(size))
109+
if err < 0 {
110+
return MakeGitError(err)
111+
}
112+
113+
return nil
114+
}
115+
78116
func getSizet(opt C.int) (int, error) {
79117
runtime.LockOSThread()
80118
defer runtime.UnlockOSThread()
@@ -88,6 +126,19 @@ func getSizet(opt C.int) (int, error) {
88126
return int(val), nil
89127
}
90128

129+
func getSizetSizet(opt C.int) (int, int, error) {
130+
runtime.LockOSThread()
131+
defer runtime.UnlockOSThread()
132+
133+
var val1, val2 C.size_t
134+
err := C._go_git_opts_get_size_t_size_t(opt, &val1, &val2)
135+
if err < 0 {
136+
return 0, 0, MakeGitError(err)
137+
}
138+
139+
return int(val1), int(val2), nil
140+
}
141+
91142
func setSizet(opt C.int, val int) error {
92143
runtime.LockOSThread()
93144
defer runtime.UnlockOSThread()

settings_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,36 @@ func TestMmapSizes(t *testing.T) {
4848
t.Fatal("Sizes don't match")
4949
}
5050
}
51+
52+
func TestEnableCaching(t *testing.T) {
53+
err := EnableCaching(false)
54+
checkFatal(t, err)
55+
56+
err = EnableCaching(true)
57+
checkFatal(t, err)
58+
}
59+
60+
func TestGetCachedMemory(t *testing.T) {
61+
current, allowed, err := GetCachedMemory()
62+
checkFatal(t, err)
63+
64+
if current < 0 {
65+
t.Fatal("current < 0")
66+
}
67+
68+
if allowed < 0 {
69+
t.Fatal("allowed < 0")
70+
}
71+
}
72+
73+
func TestSetCacheMaxSize(t *testing.T) {
74+
err := SetCacheMaxSize(0)
75+
checkFatal(t, err)
76+
77+
err = SetCacheMaxSize(1024 * 1024)
78+
checkFatal(t, err)
79+
80+
// revert to default 256MB
81+
err = SetCacheMaxSize(256 * 1024 * 1024)
82+
checkFatal(t, err)
83+
}

0 commit comments

Comments
 (0)