settings.c 2.88 KB
Newer Older
1 2 3 4 5 6 7 8 9
/*
 * Copyright (C) the libgit2 contributors. All rights reserved.
 *
 * This file is part of libgit2, distributed under the GNU GPL v2 with
 * a Linking Exception. For full terms see the included COPYING file.
 */

#include <git2.h>
#include "common.h"
10
#include "sysdir.h"
11 12 13 14 15 16 17 18 19
#include "cache.h"

void git_libgit2_version(int *major, int *minor, int *rev)
{
	*major = LIBGIT2_VER_MAJOR;
	*minor = LIBGIT2_VER_MINOR;
	*rev = LIBGIT2_VER_REVISION;
}

20
int git_libgit2_features()
21 22 23
{
	return 0
#ifdef GIT_THREADS
24
		| GIT_FEATURE_THREADS
25 26
#endif
#if defined(GIT_SSL) || defined(GIT_WINHTTP)
27
		| GIT_FEATURE_HTTPS
28 29
#endif
#if defined(GIT_SSH)
30
		| GIT_FEATURE_SSH
31 32 33 34 35 36 37 38
#endif
	;
}

/* Declarations for tuneable settings */
extern size_t git_mwindow__window_size;
extern size_t git_mwindow__mapped_limit;

39
static int config_level_to_sysdir(int config_level)
40 41 42 43
{
	int val = -1;

	switch (config_level) {
44 45 46
	case GIT_CONFIG_LEVEL_SYSTEM: val = GIT_SYSDIR_SYSTEM; break;
	case GIT_CONFIG_LEVEL_XDG:    val = GIT_SYSDIR_XDG; break;
	case GIT_CONFIG_LEVEL_GLOBAL: val = GIT_SYSDIR_GLOBAL; break;
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
	default:
		giterr_set(
			GITERR_INVALID, "Invalid config path selector %d", config_level);
	}

	return val;
}

int git_libgit2_opts(int key, ...)
{
	int error = 0;
	va_list ap;

	va_start(ap, key);

	switch (key) {
	case GIT_OPT_SET_MWINDOW_SIZE:
		git_mwindow__window_size = va_arg(ap, size_t);
		break;

	case GIT_OPT_GET_MWINDOW_SIZE:
		*(va_arg(ap, size_t *)) = git_mwindow__window_size;
		break;

	case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
		git_mwindow__mapped_limit = va_arg(ap, size_t);
		break;

	case GIT_OPT_GET_MWINDOW_MAPPED_LIMIT:
		*(va_arg(ap, size_t *)) = git_mwindow__mapped_limit;
		break;

	case GIT_OPT_GET_SEARCH_PATH:
80
		if ((error = config_level_to_sysdir(va_arg(ap, int))) >= 0) {
81 82 83
			char *out = va_arg(ap, char *);
			size_t outlen = va_arg(ap, size_t);

84
			error = git_sysdir_get_str(out, outlen, error);
85 86 87 88
		}
		break;

	case GIT_OPT_SET_SEARCH_PATH:
89 90
		if ((error = config_level_to_sysdir(va_arg(ap, int))) >= 0)
			error = git_sysdir_set(error, va_arg(ap, const char *));
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
		break;

	case GIT_OPT_SET_CACHE_OBJECT_LIMIT:
		{
			git_otype type = (git_otype)va_arg(ap, int);
			size_t size = va_arg(ap, size_t);
			error = git_cache_set_max_object_size(type, size);
			break;
		}

	case GIT_OPT_SET_CACHE_MAX_SIZE:
		git_cache__max_storage = va_arg(ap, ssize_t);
		break;

	case GIT_OPT_ENABLE_CACHING:
		git_cache__enabled = (va_arg(ap, int) != 0);
		break;

	case GIT_OPT_GET_CACHED_MEMORY:
		*(va_arg(ap, ssize_t *)) = git_cache__current_storage.val;
		*(va_arg(ap, ssize_t *)) = git_cache__max_storage;
		break;

	case GIT_OPT_GET_TEMPLATE_PATH:
		{
			char *out = va_arg(ap, char *);
			size_t outlen = va_arg(ap, size_t);

119
			error = git_sysdir_get_str(out, outlen, GIT_SYSDIR_TEMPLATE);
120 121 122 123
		}
		break;

	case GIT_OPT_SET_TEMPLATE_PATH:
124
		error = git_sysdir_set(GIT_SYSDIR_TEMPLATE, va_arg(ap, const char *));
125 126 127 128 129 130 131 132
		break;
	}

	va_end(ap);

	return error;
}