mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-12 10:01:10 +00:00
clone: put the callbacks struct directly in the clone options
There's no need for this to be a pointer to somewhere else.
This commit is contained in:
parent
ffc97d5126
commit
0e0cf78773
@ -57,7 +57,6 @@ int do_clone(git_repository *repo, int argc, char **argv)
|
|||||||
git_repository *cloned_repo = NULL;
|
git_repository *cloned_repo = NULL;
|
||||||
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
|
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
|
||||||
git_checkout_opts checkout_opts = GIT_CHECKOUT_OPTS_INIT;
|
git_checkout_opts checkout_opts = GIT_CHECKOUT_OPTS_INIT;
|
||||||
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
|
||||||
const char *url = argv[1];
|
const char *url = argv[1];
|
||||||
const char *path = argv[2];
|
const char *path = argv[2];
|
||||||
int error;
|
int error;
|
||||||
@ -75,10 +74,9 @@ int do_clone(git_repository *repo, int argc, char **argv)
|
|||||||
checkout_opts.progress_cb = checkout_progress;
|
checkout_opts.progress_cb = checkout_progress;
|
||||||
checkout_opts.progress_payload = &pd;
|
checkout_opts.progress_payload = &pd;
|
||||||
clone_opts.checkout_opts = checkout_opts;
|
clone_opts.checkout_opts = checkout_opts;
|
||||||
callbacks.transfer_progress = &fetch_progress;
|
clone_opts.remote_callbacks.transfer_progress = &fetch_progress;
|
||||||
callbacks.credentials = cred_acquire_cb;
|
clone_opts.remote_callbacks.credentials = cred_acquire_cb;
|
||||||
callbacks.payload = &pd;
|
clone_opts.remote_callbacks.payload = &pd;
|
||||||
clone_opts.remote_callbacks = &callbacks;
|
|
||||||
|
|
||||||
// Do the clone
|
// Do the clone
|
||||||
error = git_clone(&cloned_repo, url, path, &clone_opts);
|
error = git_clone(&cloned_repo, url, path, &clone_opts);
|
||||||
|
@ -49,7 +49,7 @@ typedef struct git_clone_options {
|
|||||||
unsigned int version;
|
unsigned int version;
|
||||||
|
|
||||||
git_checkout_opts checkout_opts;
|
git_checkout_opts checkout_opts;
|
||||||
git_remote_callbacks *remote_callbacks;
|
git_remote_callbacks remote_callbacks;
|
||||||
|
|
||||||
int bare;
|
int bare;
|
||||||
int ignore_cert_errors;
|
int ignore_cert_errors;
|
||||||
@ -58,7 +58,7 @@ typedef struct git_clone_options {
|
|||||||
} git_clone_options;
|
} git_clone_options;
|
||||||
|
|
||||||
#define GIT_CLONE_OPTIONS_VERSION 1
|
#define GIT_CLONE_OPTIONS_VERSION 1
|
||||||
#define GIT_CLONE_OPTIONS_INIT {GIT_CLONE_OPTIONS_VERSION, {GIT_CHECKOUT_OPTS_VERSION, GIT_CHECKOUT_SAFE_CREATE}}
|
#define GIT_CLONE_OPTIONS_INIT {GIT_CLONE_OPTIONS_VERSION, {GIT_CHECKOUT_OPTS_VERSION, GIT_CHECKOUT_SAFE_CREATE}, GIT_REMOTE_CALLBACKS_INIT}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clone a remote repository.
|
* Clone a remote repository.
|
||||||
|
@ -457,7 +457,7 @@ struct git_remote_callbacks {
|
|||||||
* @param callbacks a pointer to the user's callback settings
|
* @param callbacks a pointer to the user's callback settings
|
||||||
* @return 0 or an error code
|
* @return 0 or an error code
|
||||||
*/
|
*/
|
||||||
GIT_EXTERN(int) git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks);
|
GIT_EXTERN(int) git_remote_set_callbacks(git_remote *remote, const git_remote_callbacks *callbacks);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the statistics structure that is filled in by the fetch operation.
|
* Get the statistics structure that is filled in by the fetch operation.
|
||||||
|
@ -315,8 +315,7 @@ static int create_and_configure_origin(
|
|||||||
if (options->ignore_cert_errors)
|
if (options->ignore_cert_errors)
|
||||||
git_remote_check_cert(origin, 0);
|
git_remote_check_cert(origin, 0);
|
||||||
|
|
||||||
if (options->remote_callbacks &&
|
if ((error = git_remote_set_callbacks(origin, &options->remote_callbacks)) < 0)
|
||||||
(error = git_remote_set_callbacks(origin, options->remote_callbacks)) < 0)
|
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
|
||||||
if ((error = git_remote_save(origin)) < 0)
|
if ((error = git_remote_save(origin)) < 0)
|
||||||
|
@ -1153,7 +1153,7 @@ void git_remote_check_cert(git_remote *remote, int check)
|
|||||||
remote->check_cert = check;
|
remote->check_cert = check;
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks)
|
int git_remote_set_callbacks(git_remote *remote, const git_remote_callbacks *callbacks)
|
||||||
{
|
{
|
||||||
assert(remote && callbacks);
|
assert(remote && callbacks);
|
||||||
|
|
||||||
@ -1162,7 +1162,7 @@ int git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks
|
|||||||
memcpy(&remote->callbacks, callbacks, sizeof(git_remote_callbacks));
|
memcpy(&remote->callbacks, callbacks, sizeof(git_remote_callbacks));
|
||||||
|
|
||||||
if (remote->transport && remote->transport->set_callbacks)
|
if (remote->transport && remote->transport->set_callbacks)
|
||||||
remote->transport->set_callbacks(remote->transport,
|
return remote->transport->set_callbacks(remote->transport,
|
||||||
remote->callbacks.progress,
|
remote->callbacks.progress,
|
||||||
NULL,
|
NULL,
|
||||||
remote->callbacks.payload);
|
remote->callbacks.payload);
|
||||||
|
@ -10,12 +10,14 @@ static git_repository *g_repo_cloned;
|
|||||||
void test_clone_empty__initialize(void)
|
void test_clone_empty__initialize(void)
|
||||||
{
|
{
|
||||||
git_repository *sandbox = cl_git_sandbox_init("empty_bare.git");
|
git_repository *sandbox = cl_git_sandbox_init("empty_bare.git");
|
||||||
|
git_remote_callbacks dummy_callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
||||||
cl_git_remove_placeholders(git_repository_path(sandbox), "dummy-marker.txt");
|
cl_git_remove_placeholders(git_repository_path(sandbox), "dummy-marker.txt");
|
||||||
|
|
||||||
g_repo = NULL;
|
g_repo = NULL;
|
||||||
|
|
||||||
memset(&g_options, 0, sizeof(git_clone_options));
|
memset(&g_options, 0, sizeof(git_clone_options));
|
||||||
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
||||||
|
g_options.remote_callbacks = dummy_callbacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_clone_empty__cleanup(void)
|
void test_clone_empty__cleanup(void)
|
||||||
|
@ -15,6 +15,7 @@ static git_remote* g_remote;
|
|||||||
void test_clone_nonetwork__initialize(void)
|
void test_clone_nonetwork__initialize(void)
|
||||||
{
|
{
|
||||||
git_checkout_opts dummy_opts = GIT_CHECKOUT_OPTS_INIT;
|
git_checkout_opts dummy_opts = GIT_CHECKOUT_OPTS_INIT;
|
||||||
|
git_remote_callbacks dummy_callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
||||||
|
|
||||||
g_repo = NULL;
|
g_repo = NULL;
|
||||||
|
|
||||||
@ -22,6 +23,7 @@ void test_clone_nonetwork__initialize(void)
|
|||||||
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
||||||
g_options.checkout_opts = dummy_opts;
|
g_options.checkout_opts = dummy_opts;
|
||||||
g_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
|
g_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
|
||||||
|
g_options.remote_callbacks = dummy_callbacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_clone_nonetwork__cleanup(void)
|
void test_clone_nonetwork__cleanup(void)
|
||||||
|
@ -18,6 +18,7 @@ static git_clone_options g_options;
|
|||||||
void test_online_clone__initialize(void)
|
void test_online_clone__initialize(void)
|
||||||
{
|
{
|
||||||
git_checkout_opts dummy_opts = GIT_CHECKOUT_OPTS_INIT;
|
git_checkout_opts dummy_opts = GIT_CHECKOUT_OPTS_INIT;
|
||||||
|
git_remote_callbacks dummy_callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
||||||
|
|
||||||
g_repo = NULL;
|
g_repo = NULL;
|
||||||
|
|
||||||
@ -25,6 +26,7 @@ void test_online_clone__initialize(void)
|
|||||||
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
||||||
g_options.checkout_opts = dummy_opts;
|
g_options.checkout_opts = dummy_opts;
|
||||||
g_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
|
g_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
|
||||||
|
g_options.remote_callbacks = dummy_callbacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_online_clone__cleanup(void)
|
void test_online_clone__cleanup(void)
|
||||||
@ -100,15 +102,11 @@ void test_online_clone__can_checkout_a_cloned_repo(void)
|
|||||||
bool checkout_progress_cb_was_called = false,
|
bool checkout_progress_cb_was_called = false,
|
||||||
fetch_progress_cb_was_called = false;
|
fetch_progress_cb_was_called = false;
|
||||||
|
|
||||||
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
|
||||||
|
|
||||||
g_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
|
g_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
|
||||||
g_options.checkout_opts.progress_cb = &checkout_progress;
|
g_options.checkout_opts.progress_cb = &checkout_progress;
|
||||||
g_options.checkout_opts.progress_payload = &checkout_progress_cb_was_called;
|
g_options.checkout_opts.progress_payload = &checkout_progress_cb_was_called;
|
||||||
|
g_options.remote_callbacks.transfer_progress = &fetch_progress;
|
||||||
callbacks.transfer_progress = &fetch_progress;
|
g_options.remote_callbacks.payload = &fetch_progress_cb_was_called;
|
||||||
callbacks.payload = &fetch_progress_cb_was_called;
|
|
||||||
g_options.remote_callbacks = &callbacks;
|
|
||||||
|
|
||||||
cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options));
|
cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options));
|
||||||
|
|
||||||
@ -175,12 +173,10 @@ static int update_tips(const char *refname, const git_oid *a, const git_oid *b,
|
|||||||
|
|
||||||
void test_online_clone__custom_remote_callbacks(void)
|
void test_online_clone__custom_remote_callbacks(void)
|
||||||
{
|
{
|
||||||
git_remote_callbacks remote_callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
|
||||||
int callcount = 0;
|
int callcount = 0;
|
||||||
|
|
||||||
g_options.remote_callbacks = &remote_callbacks;
|
g_options.remote_callbacks.update_tips = update_tips;
|
||||||
remote_callbacks.update_tips = update_tips;
|
g_options.remote_callbacks.payload = &callcount;
|
||||||
remote_callbacks.payload = &callcount;
|
|
||||||
|
|
||||||
cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options));
|
cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options));
|
||||||
cl_assert(callcount > 0);
|
cl_assert(callcount > 0);
|
||||||
@ -194,13 +190,11 @@ void test_online_clone__credentials(void)
|
|||||||
cl_getenv("GITTEST_REMOTE_USER"),
|
cl_getenv("GITTEST_REMOTE_USER"),
|
||||||
cl_getenv("GITTEST_REMOTE_PASS")
|
cl_getenv("GITTEST_REMOTE_PASS")
|
||||||
};
|
};
|
||||||
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
|
||||||
|
|
||||||
if (!remote_url) return;
|
if (!remote_url) return;
|
||||||
|
|
||||||
callbacks.credentials = git_cred_userpass;
|
g_options.remote_callbacks.credentials = git_cred_userpass;
|
||||||
callbacks.payload = &user_pass;
|
g_options.remote_callbacks.payload = &user_pass;
|
||||||
g_options.remote_callbacks = &callbacks;
|
|
||||||
|
|
||||||
cl_git_pass(git_clone(&g_repo, remote_url, "./foo", &g_options));
|
cl_git_pass(git_clone(&g_repo, remote_url, "./foo", &g_options));
|
||||||
git_repository_free(g_repo); g_repo = NULL;
|
git_repository_free(g_repo); g_repo = NULL;
|
||||||
@ -213,11 +207,8 @@ void test_online_clone__bitbucket_style(void)
|
|||||||
"libgit2", "libgit2"
|
"libgit2", "libgit2"
|
||||||
};
|
};
|
||||||
|
|
||||||
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
g_options.remote_callbacks.credentials = git_cred_userpass;
|
||||||
|
g_options.remote_callbacks.payload = &user_pass;
|
||||||
callbacks.credentials = git_cred_userpass;
|
|
||||||
callbacks.payload = &user_pass;
|
|
||||||
g_options.remote_callbacks = &callbacks;
|
|
||||||
|
|
||||||
cl_git_pass(git_clone(&g_repo, BB_REPO_URL, "./foo", &g_options));
|
cl_git_pass(git_clone(&g_repo, BB_REPO_URL, "./foo", &g_options));
|
||||||
git_repository_free(g_repo); g_repo = NULL;
|
git_repository_free(g_repo); g_repo = NULL;
|
||||||
@ -247,10 +238,7 @@ static int cancel_at_half(const git_transfer_progress *stats, void *payload)
|
|||||||
|
|
||||||
void test_online_clone__can_cancel(void)
|
void test_online_clone__can_cancel(void)
|
||||||
{
|
{
|
||||||
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
g_options.remote_callbacks.transfer_progress = cancel_at_half;
|
||||||
|
|
||||||
callbacks.transfer_progress = cancel_at_half;
|
|
||||||
g_options.remote_callbacks = &callbacks;
|
|
||||||
|
|
||||||
cl_git_fail_with(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options), GIT_EUSER);
|
cl_git_fail_with(git_clone(&g_repo, LIVE_REPO_URL, "./foo", &g_options), GIT_EUSER);
|
||||||
}
|
}
|
||||||
|
@ -12,10 +12,12 @@ static git_clone_options g_options;
|
|||||||
|
|
||||||
void test_online_fetchhead__initialize(void)
|
void test_online_fetchhead__initialize(void)
|
||||||
{
|
{
|
||||||
|
git_remote_callbacks dummy_callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
||||||
g_repo = NULL;
|
g_repo = NULL;
|
||||||
|
|
||||||
memset(&g_options, 0, sizeof(git_clone_options));
|
memset(&g_options, 0, sizeof(git_clone_options));
|
||||||
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
g_options.version = GIT_CLONE_OPTIONS_VERSION;
|
||||||
|
g_options.remote_callbacks = dummy_callbacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_online_fetchhead__cleanup(void)
|
void test_online_fetchhead__cleanup(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user