diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2021-09-04 10:16:41 -0400 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2021-09-04 13:00:18 -0400 |
commit | a24e656a4e6278157d2aec885e0d300f47f74938 (patch) | |
tree | 793b046f71667ccb448c2138402c1be9afbb77b6 /src/libgit2.c | |
parent | 2f3074da512624c9522683f9aa6bca6642a3e4f7 (diff) | |
download | libgit2-ethomson/extensions.tar.gz |
common: support custom repository extensionsethomson/extensions
Allow users to specify additional repository extensions that they want
to support. For example, callers can specify that they support
`preciousObjects` and then may open repositories that support
`extensions.preciousObjects`.
Similarly, callers may opt out of supporting extensions that the library
itself supports.
Diffstat (limited to 'src/libgit2.c')
-rw-r--r-- | src/libgit2.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libgit2.c b/src/libgit2.c index 09f7ab533..cc793b458 100644 --- a/src/libgit2.c +++ b/src/libgit2.c @@ -52,6 +52,7 @@ static void libgit2_settings_global_shutdown(void) { git__free(git__user_agent); git__free(git__ssl_ciphers); + git_repository__free_extensions(); } static int git_libgit2_settings_global_init(void) @@ -367,6 +368,28 @@ int git_libgit2_opts(int key, ...) git_odb__loose_priority = va_arg(ap, int); break; + case GIT_OPT_SET_EXTENSIONS: + { + const char **extensions = va_arg(ap, const char **); + size_t len = va_arg(ap, size_t); + error = git_repository__set_extensions(extensions, len); + } + break; + + case GIT_OPT_GET_EXTENSIONS: + { + git_strarray *out = va_arg(ap, git_strarray *); + char **extensions; + size_t len; + + if ((error = git_repository__extensions(&extensions, &len)) < 0) + break; + + out->strings = extensions; + out->count = len; + } + break; + default: git_error_set(GIT_ERROR_INVALID, "invalid option key"); error = -1; |