mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-21 22:21:37 +00:00
Merge pull request #1436 from schu/opts-cache-size
opts: allow configuration of odb cache size
This commit is contained in:
commit
0b061b5bfa
@ -131,6 +131,8 @@ enum {
|
|||||||
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
|
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
|
||||||
GIT_OPT_GET_SEARCH_PATH,
|
GIT_OPT_GET_SEARCH_PATH,
|
||||||
GIT_OPT_SET_SEARCH_PATH,
|
GIT_OPT_SET_SEARCH_PATH,
|
||||||
|
GIT_OPT_GET_ODB_CACHE_SIZE,
|
||||||
|
GIT_OPT_SET_ODB_CACHE_SIZE,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -167,6 +169,15 @@ enum {
|
|||||||
* - `level` must be GIT_CONFIG_LEVEL_SYSTEM, GIT_CONFIG_LEVEL_GLOBAL,
|
* - `level` must be GIT_CONFIG_LEVEL_SYSTEM, GIT_CONFIG_LEVEL_GLOBAL,
|
||||||
* or GIT_CONFIG_LEVEL_XDG.
|
* or GIT_CONFIG_LEVEL_XDG.
|
||||||
*
|
*
|
||||||
|
* opts(GIT_OPT_GET_ODB_CACHE_SIZE):
|
||||||
|
* Get the size of the libgit2 odb cache.
|
||||||
|
*
|
||||||
|
* opts(GIT_OPT_SET_ODB_CACHE_SIZE):
|
||||||
|
* Set the size of the of the libgit2 odb cache. This needs
|
||||||
|
* to be done before git_repository_open is called, since
|
||||||
|
* git_repository_open initializes the odb layer. Defaults
|
||||||
|
* to 128.
|
||||||
|
*
|
||||||
* @param option Option key
|
* @param option Option key
|
||||||
* @param ... value to set the option
|
* @param ... value to set the option
|
||||||
* @return 0 on success, <0 on failure
|
* @return 0 on success, <0 on failure
|
||||||
|
@ -32,6 +32,8 @@ typedef struct
|
|||||||
int is_alternate;
|
int is_alternate;
|
||||||
} backend_internal;
|
} backend_internal;
|
||||||
|
|
||||||
|
size_t git_odb__cache_size = GIT_DEFAULT_CACHE_SIZE;
|
||||||
|
|
||||||
static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_depth);
|
static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_depth);
|
||||||
|
|
||||||
int git_odb__format_object_header(char *hdr, size_t n, size_t obj_len, git_otype obj_type)
|
int git_odb__format_object_header(char *hdr, size_t n, size_t obj_len, git_otype obj_type)
|
||||||
@ -351,7 +353,7 @@ int git_odb_new(git_odb **out)
|
|||||||
git_odb *db = git__calloc(1, sizeof(*db));
|
git_odb *db = git__calloc(1, sizeof(*db));
|
||||||
GITERR_CHECK_ALLOC(db);
|
GITERR_CHECK_ALLOC(db);
|
||||||
|
|
||||||
if (git_cache_init(&db->cache, GIT_DEFAULT_CACHE_SIZE, &free_odb_object) < 0 ||
|
if (git_cache_init(&db->cache, git_odb__cache_size, &free_odb_object) < 0 ||
|
||||||
git_vector_init(&db->backends, 4, backend_sort_cmp) < 0)
|
git_vector_init(&db->backends, 4, backend_sort_cmp) < 0)
|
||||||
{
|
{
|
||||||
git__free(db);
|
git__free(db);
|
||||||
|
@ -38,6 +38,7 @@ int git_libgit2_capabilities()
|
|||||||
/* Declarations for tuneable settings */
|
/* Declarations for tuneable settings */
|
||||||
extern size_t git_mwindow__window_size;
|
extern size_t git_mwindow__window_size;
|
||||||
extern size_t git_mwindow__mapped_limit;
|
extern size_t git_mwindow__mapped_limit;
|
||||||
|
extern size_t git_odb__cache_size;
|
||||||
|
|
||||||
static int config_level_to_futils_dir(int config_level)
|
static int config_level_to_futils_dir(int config_level)
|
||||||
{
|
{
|
||||||
@ -92,6 +93,14 @@ int git_libgit2_opts(int key, ...)
|
|||||||
if ((error = config_level_to_futils_dir(va_arg(ap, int))) >= 0)
|
if ((error = config_level_to_futils_dir(va_arg(ap, int))) >= 0)
|
||||||
error = git_futils_dirs_set(error, va_arg(ap, const char *));
|
error = git_futils_dirs_set(error, va_arg(ap, const char *));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GIT_OPT_GET_ODB_CACHE_SIZE:
|
||||||
|
*(va_arg(ap, size_t *)) = git_odb__cache_size;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIT_OPT_SET_ODB_CACHE_SIZE:
|
||||||
|
git_odb__cache_size = va_arg(ap, size_t);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "clar_libgit2.h"
|
#include "clar_libgit2.h"
|
||||||
|
#include "cache.h"
|
||||||
|
|
||||||
void test_core_opts__readwrite(void)
|
void test_core_opts__readwrite(void)
|
||||||
{
|
{
|
||||||
@ -15,4 +16,15 @@ void test_core_opts__readwrite(void)
|
|||||||
git_libgit2_opts(GIT_OPT_GET_MWINDOW_SIZE, &new_val);
|
git_libgit2_opts(GIT_OPT_GET_MWINDOW_SIZE, &new_val);
|
||||||
|
|
||||||
cl_assert(new_val == old_val);
|
cl_assert(new_val == old_val);
|
||||||
|
|
||||||
|
git_libgit2_opts(GIT_OPT_GET_ODB_CACHE_SIZE, &old_val);
|
||||||
|
|
||||||
|
cl_assert(old_val == GIT_DEFAULT_CACHE_SIZE);
|
||||||
|
|
||||||
|
git_libgit2_opts(GIT_OPT_SET_ODB_CACHE_SIZE, (size_t)GIT_DEFAULT_CACHE_SIZE*2);
|
||||||
|
git_libgit2_opts(GIT_OPT_GET_ODB_CACHE_SIZE, &new_val);
|
||||||
|
|
||||||
|
cl_assert(new_val == (GIT_DEFAULT_CACHE_SIZE*2));
|
||||||
|
|
||||||
|
git_libgit2_opts(GIT_OPT_GET_ODB_CACHE_SIZE, &old_val);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user