mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-02 22:49:04 +00:00
git_clone supports optional init_options
This commit is contained in:
parent
e580afd863
commit
f2df503bab
@ -67,6 +67,7 @@ typedef struct git_clone_options {
|
||||
unsigned int version;
|
||||
|
||||
git_checkout_opts checkout_opts;
|
||||
git_repository_init_options *init_options;
|
||||
int bare;
|
||||
git_transfer_progress_callback fetch_progress_cb;
|
||||
void *fetch_progress_payload;
|
||||
|
14
src/clone.c
14
src/clone.c
@ -418,7 +418,7 @@ static bool should_checkout(
|
||||
return !git_repository_head_orphan(repo);
|
||||
}
|
||||
|
||||
static void normalize_options(git_clone_options *dst, const git_clone_options *src)
|
||||
static void normalize_options(git_clone_options *dst, const git_clone_options *src, git_repository_init_options *initOptions)
|
||||
{
|
||||
git_clone_options default_options = GIT_CLONE_OPTIONS_INIT;
|
||||
if (!src) src = &default_options;
|
||||
@ -427,6 +427,13 @@ static void normalize_options(git_clone_options *dst, const git_clone_options *s
|
||||
|
||||
/* Provide defaults for null pointers */
|
||||
if (!dst->remote_name) dst->remote_name = "origin";
|
||||
if (!dst->init_options)
|
||||
{
|
||||
dst->init_options = initOptions;
|
||||
initOptions->flags = GIT_REPOSITORY_INIT_MKPATH;
|
||||
if (dst->bare)
|
||||
initOptions->flags |= GIT_REPOSITORY_INIT_BARE;
|
||||
}
|
||||
}
|
||||
|
||||
int git_clone(
|
||||
@ -439,10 +446,11 @@ int git_clone(
|
||||
git_repository *repo = NULL;
|
||||
git_clone_options normOptions;
|
||||
int remove_directory_on_failure = 0;
|
||||
git_repository_init_options initOptions = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
||||
|
||||
assert(out && url && local_path);
|
||||
|
||||
normalize_options(&normOptions, options);
|
||||
normalize_options(&normOptions, options, &initOptions);
|
||||
GITERR_CHECK_VERSION(&normOptions, GIT_CLONE_OPTIONS_VERSION, "git_clone_options");
|
||||
|
||||
/* Only clone to a new directory or an empty directory */
|
||||
@ -455,7 +463,7 @@ int git_clone(
|
||||
/* Only remove the directory on failure if we create it */
|
||||
remove_directory_on_failure = !git_path_exists(local_path);
|
||||
|
||||
if (!(retcode = git_repository_init(&repo, local_path, normOptions.bare))) {
|
||||
if (!(retcode = git_repository_init_ext(&repo, local_path, normOptions.init_options))) {
|
||||
if ((retcode = setup_remotes_and_fetch(repo, url, &normOptions)) < 0) {
|
||||
/* Failed to fetch; clean up */
|
||||
git_repository_free(repo);
|
||||
|
Loading…
Reference in New Issue
Block a user