]> git.proxmox.com Git - libgit2.git/commitdiff
Deploy GIT_REPOSITORY_INIT_OPTIONS_INIT
authorBen Straub <bs@github.com>
Fri, 30 Nov 2012 04:06:23 +0000 (20:06 -0800)
committerBen Straub <bs@github.com>
Fri, 30 Nov 2012 21:12:15 +0000 (13:12 -0800)
src/repository.c
src/submodule.c
tests-clar/repo/init.c

index b49b49b7a5776d00e9efb3aee90cb3ecf16b1bf3..073efa484472a5c8ec3c84398d09951dfd28f365 100644 (file)
@@ -1151,9 +1151,8 @@ static int repo_init_create_origin(git_repository *repo, const char *url)
 int git_repository_init(
        git_repository **repo_out, const char *path, unsigned is_bare)
 {
-       git_repository_init_options opts;
+       git_repository_init_options opts = GIT_REPOSITORY_INIT_OPTIONS_INIT;
 
-       memset(&opts, 0, sizeof(opts));
        opts.flags = GIT_REPOSITORY_INIT_MKPATH; /* don't love this default */
        if (is_bare)
                opts.flags |= GIT_REPOSITORY_INIT_BARE;
@@ -1161,6 +1160,18 @@ int git_repository_init(
        return git_repository_init_ext(repo_out, path, &opts);
 }
 
+static bool options_have_valid_version(git_repository_init_options *opts)
+{
+       if (!opts)
+               return true;
+
+       if (opts->version > 0 && opts->version <= GIT_REMOTE_CALLBACKS_VERSION)
+               return true;
+
+       giterr_set(GITERR_INVALID, "Invalid version %d for git_repository_init_options", opts->version);
+       return false;
+}
+
 int git_repository_init_ext(
        git_repository **out,
        const char *given_repo,
@@ -1171,6 +1182,9 @@ int git_repository_init_ext(
 
        assert(out && given_repo && opts);
 
+       if (!options_have_valid_version(opts))
+               return -1;
+
        error = repo_init_directories(&repo_path, &wd_path, given_repo, opts);
        if (error < 0)
                goto cleanup;
index 7ac666c732733994666d789e5b7057539ce9d575..21a1875c2abfeeaa6d703c01e60a57b8345355d5 100644 (file)
@@ -205,7 +205,7 @@ int git_submodule_add_setup(
        git_config_backend *mods = NULL;
        git_submodule *sm;
        git_buf name = GIT_BUF_INIT, real_url = GIT_BUF_INIT;
-       git_repository_init_options initopt;
+       git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
        git_repository *subrepo = NULL;
 
        assert(repo && url && path);
@@ -275,7 +275,6 @@ int git_submodule_add_setup(
         * Old style: sub-repo goes directly into repo/<name>/.git/
         */
 
-       memset(&initopt, 0, sizeof(initopt));
        initopt.flags = GIT_REPOSITORY_INIT_MKPATH |
                GIT_REPOSITORY_INIT_NO_REINIT;
        initopt.origin_url = real_url.ptr;
index 3b14c97f282efbbfece2ccf823890ad59420a8e6..c0acbed5a853276d4f3c0ca01a61420543c6879e 100644 (file)
@@ -304,8 +304,7 @@ void test_repo_init__sets_logAllRefUpdates_according_to_type_of_repository(void)
 
 void test_repo_init__extended_0(void)
 {
-       git_repository_init_options opts;
-       memset(&opts, 0, sizeof(opts));
+       git_repository_init_options opts = GIT_REPOSITORY_INIT_OPTIONS_INIT;
 
        /* without MKDIR this should fail */
        cl_git_fail(git_repository_init_ext(&_repo, "extended", &opts));
@@ -327,8 +326,7 @@ void test_repo_init__extended_1(void)
        git_reference *ref;
        git_remote *remote;
        struct stat st;
-       git_repository_init_options opts;
-       memset(&opts, 0, sizeof(opts));
+       git_repository_init_options opts = GIT_REPOSITORY_INIT_OPTIONS_INIT;
 
        opts.flags = GIT_REPOSITORY_INIT_MKPATH |
                GIT_REPOSITORY_INIT_NO_DOTGIT_DIR;
@@ -367,8 +365,7 @@ void test_repo_init__extended_1(void)
 
 void test_repo_init__extended_with_template(void)
 {
-       git_repository_init_options opts;
-       memset(&opts, 0, sizeof(opts));
+       git_repository_init_options opts = GIT_REPOSITORY_INIT_OPTIONS_INIT;
 
        opts.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_BARE;
        opts.template_path = cl_fixture("template");