2 * Copyright (C) the libgit2 contributors. All rights reserved.
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
7 #ifndef INCLUDE_git_common_h__
8 #define INCLUDE_git_common_h__
14 # define GIT_BEGIN_DECL extern "C" {
15 # define GIT_END_DECL }
17 /** Start declarations in C mode */
18 # define GIT_BEGIN_DECL /* empty */
19 /** End declarations in C mode */
20 # define GIT_END_DECL /* empty */
23 #if defined(_MSC_VER) && _MSC_VER < 1800
25 # include "inttypes.h"
27 /** This check is needed for importing this file in an iOS/OS X framework throws an error in Xcode otherwise.*/
28 #elif !defined(__CLANG_INTTYPES_H)
29 # include <inttypes.h>
34 * This is so clang's doc parser acknowledges comments on functions
35 * with size_t parameters.
37 typedef size_t size_t;
40 /** Declare a public function exported for application use. */
42 # define GIT_EXTERN(type) extern \
43 __attribute__((visibility("default"))) \
45 #elif defined(_MSC_VER)
46 # define GIT_EXTERN(type) __declspec(dllexport) type
48 # define GIT_EXTERN(type) extern type
51 /** Declare a function's takes printf style arguments. */
53 # define GIT_FORMAT_PRINTF(a,b) __attribute__((format (printf, a, b)))
55 # define GIT_FORMAT_PRINTF(a,b) /* empty */
58 #if (defined(_WIN32)) && !defined(__CYGWIN__)
63 #include <netinet/in.h>
68 * @brief Git common platform definitions
69 * @defgroup git_common Git common platform definitions
77 * The separator used in path list strings (ie like in the PATH
78 * environment variable). A semi-colon ";" is used on Windows, and
79 * a colon ":" for all other systems.
82 #define GIT_PATH_LIST_SEPARATOR ';'
84 #define GIT_PATH_LIST_SEPARATOR ':'
88 * The maximum length of a valid git path.
90 #define GIT_PATH_MAX 4096
93 * The string representation of the null object ID.
95 #define GIT_OID_HEX_ZERO "0000000000000000000000000000000000000000"
98 * Return the version of the libgit2 library
99 * being currently used.
101 * @param major Store the major version number
102 * @param minor Store the minor version number
103 * @param rev Store the revision (patch) number
105 GIT_EXTERN(void) git_libgit2_version(int *major
, int *minor
, int *rev
);
108 * Combinations of these values describe the features with which libgit2
112 GIT_FEATURE_THREADS
= (1 << 0),
113 GIT_FEATURE_HTTPS
= (1 << 1),
114 GIT_FEATURE_SSH
= (1 << 2),
115 GIT_FEATURE_NSEC
= (1 << 3),
119 * Query compile time options for libgit2.
121 * @return A combination of GIT_FEATURE_* values.
123 * - GIT_FEATURE_THREADS
124 * Libgit2 was compiled with thread support. Note that thread support is
125 * still to be seen as a 'work in progress' - basic object lookups are
126 * believed to be threadsafe, but other operations may not be.
128 * - GIT_FEATURE_HTTPS
129 * Libgit2 supports the https:// protocol. This requires the openssl
130 * library to be found when compiling libgit2.
133 * Libgit2 supports the SSH protocol for network operations. This requires
134 * the libssh2 library to be found when compiling libgit2
136 GIT_EXTERN(int) git_libgit2_features(void);
139 * Global library options
141 * These are used to select which global option to set or get and are
142 * used in `git_libgit2_opts()`.
145 GIT_OPT_GET_MWINDOW_SIZE
,
146 GIT_OPT_SET_MWINDOW_SIZE
,
147 GIT_OPT_GET_MWINDOW_MAPPED_LIMIT
,
148 GIT_OPT_SET_MWINDOW_MAPPED_LIMIT
,
149 GIT_OPT_GET_SEARCH_PATH
,
150 GIT_OPT_SET_SEARCH_PATH
,
151 GIT_OPT_SET_CACHE_OBJECT_LIMIT
,
152 GIT_OPT_SET_CACHE_MAX_SIZE
,
153 GIT_OPT_ENABLE_CACHING
,
154 GIT_OPT_GET_CACHED_MEMORY
,
155 GIT_OPT_GET_TEMPLATE_PATH
,
156 GIT_OPT_SET_TEMPLATE_PATH
,
157 GIT_OPT_SET_SSL_CERT_LOCATIONS
,
158 GIT_OPT_SET_USER_AGENT
,
159 GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
160 GIT_OPT_SET_SSL_CIPHERS
,
161 GIT_OPT_GET_USER_AGENT
,
165 * Set or query a library global option
169 * * opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):
171 * > Get the maximum mmap window size
173 * * opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):
175 * > Set the maximum mmap window size
177 * * opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):
179 * > Get the maximum memory that will be mapped in total by the library
181 * * opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):
183 * >Set the maximum amount of memory that can be mapped at any time
186 * * opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)
188 * > Get the search path for a given level of config data. "level" must
189 * > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,
190 * > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.
191 * > The search path is written to the `out` buffer.
193 * * opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)
195 * > Set the search path for a level of config data. The search path
196 * > applied to shared attributes and ignore files, too.
198 * > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.
199 * > Pass NULL to reset to the default (generally based on environment
200 * > variables). Use magic path `$PATH` to include the old value
201 * > of the path (if you want to prepend or append, for instance).
203 * > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,
204 * > `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or
205 * > `GIT_CONFIG_LEVEL_PROGRAMDATA`.
207 * * opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_otype type, size_t size)
209 * > Set the maximum data size for the given type of object to be
210 * > considered eligible for caching in memory. Setting to value to
211 * > zero means that that type of object will not be cached.
212 * > Defaults to 0 for GIT_OBJ_BLOB (i.e. won't cache blobs) and 4k
213 * > for GIT_OBJ_COMMIT, GIT_OBJ_TREE, and GIT_OBJ_TAG.
215 * * opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)
217 * > Set the maximum total data size that will be cached in memory
218 * > across all repositories before libgit2 starts evicting objects
219 * > from the cache. This is a soft limit, in that the library might
220 * > briefly exceed it, but will start aggressively evicting objects
221 * > from cache when that happens. The default cache size is 256MB.
223 * * opts(GIT_OPT_ENABLE_CACHING, int enabled)
225 * > Enable or disable caching completely.
227 * > Because caches are repository-specific, disabling the cache
228 * > cannot immediately clear all cached objects, but each cache will
229 * > be cleared on the next attempt to update anything in it.
231 * * opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)
233 * > Get the current bytes in cache and the maximum that would be
234 * > allowed in the cache.
236 * * opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)
238 * > Get the default template path.
239 * > The path is written to the `out` buffer.
241 * * opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)
243 * > Set the default template path.
245 * > - `path` directory of template.
247 * * opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)
249 * > Set the SSL certificate-authority locations.
251 * > - `file` is the location of a file containing several
252 * > certificates concatenated together.
253 * > - `path` is the location of a directory holding several
254 * > certificates, one per file.
256 * > Either parameter may be `NULL`, but not both.
258 * * opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)
260 * > Set the value of the User-Agent header. This value will be
261 * > appended to "git/1.0", for compatibility with other git clients.
263 * > - `user_agent` is the value that will be delivered as the
264 * > User-Agent header on HTTP requests.
266 * * opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)
268 * > Enable strict input validation when creating new objects
269 * > to ensure that all inputs to the new objects are valid. For
270 * > example, when this is enabled, the parent(s) and tree inputs
271 * > will be validated when creating a new commit. This defaults
273 * * opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)
275 * > Set the SSL ciphers use for HTTPS connections.
277 * > - `ciphers` is the list of ciphers that are eanbled.
279 * @param option Option key
280 * @param ... value to set the option
281 * @return 0 on success, <0 on failure
283 GIT_EXTERN(int) git_libgit2_opts(int option
, ...);