diff options
| author | Linquize <linquize@yahoo.com.hk> | 2013-09-14 18:22:16 +0800 |
|---|---|---|
| committer | Linquize <linquize@yahoo.com.hk> | 2013-09-16 08:02:36 +0800 |
| commit | f2df503bab6ae6e77ff0bbe17f358822be51b944 (patch) | |
| tree | 225e956475791e23f85ffbf166c3f9406e81ca94 | |
| parent | e580afd8634c99449b0ed6e8113873518359c2c5 (diff) | |
| download | libgit2-f2df503bab6ae6e77ff0bbe17f358822be51b944.tar.gz | |
git_clone supports optional init_options
| -rw-r--r-- | include/git2/clone.h | 1 | ||||
| -rw-r--r-- | src/clone.c | 14 |
2 files changed, 12 insertions, 3 deletions
diff --git a/include/git2/clone.h b/include/git2/clone.h index 5858b4e32..580352ac1 100644 --- a/include/git2/clone.h +++ b/include/git2/clone.h @@ -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; diff --git a/src/clone.c b/src/clone.c index 5c11872cc..5b8fc5e45 100644 --- a/src/clone.c +++ b/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); |
