mirror of
https://git.proxmox.com/git/libgit2
synced 2025-12-25 07:43:59 +00:00
settings: add a setter for a custom user-agent
This commit is contained in:
parent
1c34b717e0
commit
de870533e0
@ -145,6 +145,7 @@ typedef enum {
|
||||
GIT_OPT_GET_TEMPLATE_PATH,
|
||||
GIT_OPT_SET_TEMPLATE_PATH,
|
||||
GIT_OPT_SET_SSL_CERT_LOCATIONS,
|
||||
GIT_OPT_SET_USER_AGENT,
|
||||
} git_libgit2_opt_t;
|
||||
|
||||
/**
|
||||
@ -240,6 +241,8 @@ typedef enum {
|
||||
* >
|
||||
* > Either parameter may be `NULL`, but not both.
|
||||
*
|
||||
* * opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)
|
||||
*
|
||||
* @param option Option key
|
||||
* @param ... value to set the option
|
||||
* @return 0 on success, <0 on failure
|
||||
|
||||
@ -31,6 +31,7 @@ static git_mutex *openssl_locks;
|
||||
static git_global_shutdown_fn git__shutdown_callbacks[MAX_SHUTDOWN_CB];
|
||||
static git_atomic git__n_shutdown_callbacks;
|
||||
static git_atomic git__n_inits;
|
||||
char *git__user_agent;
|
||||
|
||||
void git__on_shutdown(git_global_shutdown_fn callback)
|
||||
{
|
||||
@ -269,6 +270,8 @@ int git_libgit2_shutdown(void)
|
||||
git_win32__crtdbg_stacktrace_cleanup();
|
||||
git_win32__stack_cleanup();
|
||||
#endif
|
||||
|
||||
git__free(git__user_agent);
|
||||
}
|
||||
|
||||
/* Exit the lock */
|
||||
@ -369,6 +372,7 @@ int git_libgit2_shutdown(void)
|
||||
|
||||
git__global_state_cleanup(ptr);
|
||||
git__free(ptr);
|
||||
git__free(git__user_agent);
|
||||
|
||||
pthread_key_delete(_tls_key);
|
||||
git_mutex_free(&git__mwindow_mutex);
|
||||
@ -423,6 +427,7 @@ int git_libgit2_shutdown(void)
|
||||
git__shutdown();
|
||||
git__global_state_cleanup(&__state);
|
||||
uninit_ssl();
|
||||
git__free(git__user_agent);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -35,4 +35,6 @@ extern void git__on_shutdown(git_global_shutdown_fn callback);
|
||||
|
||||
extern void git__free_tls_data(void);
|
||||
|
||||
extern const char *git_libgit2__user_agent(void);
|
||||
|
||||
#endif
|
||||
|
||||
@ -57,6 +57,13 @@ static int config_level_to_sysdir(int config_level)
|
||||
return val;
|
||||
}
|
||||
|
||||
extern char *git__user_agent;
|
||||
|
||||
const char *git_libgit2__user_agent()
|
||||
{
|
||||
return git__user_agent;
|
||||
}
|
||||
|
||||
int git_libgit2_opts(int key, ...)
|
||||
{
|
||||
int error = 0;
|
||||
@ -152,6 +159,15 @@ int git_libgit2_opts(int key, ...)
|
||||
giterr_set(GITERR_NET, "Cannot set certificate locations: OpenSSL is not enabled");
|
||||
error = -1;
|
||||
#endif
|
||||
break;
|
||||
case GIT_OPT_SET_USER_AGENT:
|
||||
git__free(git__user_agent);
|
||||
git__user_agent = git__strdup(va_arg(ap, const char *));
|
||||
if (!git__user_agent) {
|
||||
giterr_set_oom();
|
||||
error = -1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
11
tests/core/useragent.c
Normal file
11
tests/core/useragent.c
Normal file
@ -0,0 +1,11 @@
|
||||
#include "clar_libgit2.h"
|
||||
#include "global.h"
|
||||
|
||||
void test_core_useragent__get(void)
|
||||
{
|
||||
const char *custom_name = "super duper git";
|
||||
|
||||
cl_assert_equal_p(NULL, git_libgit2__user_agent());
|
||||
cl_git_pass(git_libgit2_opts(GIT_OPT_SET_USER_AGENT, custom_name));
|
||||
cl_assert_equal_s(custom_name, git_libgit2__user_agent());
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user