]> git.ipfire.org Git - thirdparty/git.git/commitdiff
init-db: move writing repo version into a function
authorbrian m. carlson <sandals@crustytoothpaste.net>
Sat, 22 Feb 2020 20:17:40 +0000 (20:17 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Feb 2020 17:33:30 +0000 (09:33 -0800)
When we perform a clone, we won't know the remote side's hash algorithm
until we've read the heads.  Consequently, we'll need to rewrite the
repository format version and hash algorithm once we know what the
remote side has.  Move the code that does this into its own function so
that we can call it from clone in the future.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/init-db.c
cache.h

index ab4fd682ab8be02f91f0f01d1dcadb7cd9b5f974..5d96e5988594db82d7d29d00f1c3e3c9f8cf0a16 100644 (file)
@@ -178,6 +178,29 @@ static int needs_work_tree_config(const char *git_dir, const char *work_tree)
        return 1;
 }
 
+void initialize_repository_version(int hash_algo)
+{
+       char repo_version_string[10];
+       int repo_version = GIT_REPO_VERSION;
+
+#ifndef ENABLE_SHA256
+       if (hash_algo != GIT_HASH_SHA1)
+               die(_("The hash algorithm %s is not supported in this build."), hash_algos[hash_algo].name);
+#endif
+
+       if (hash_algo != GIT_HASH_SHA1)
+               repo_version = GIT_REPO_VERSION_READ;
+
+       /* This forces creation of new config file */
+       xsnprintf(repo_version_string, sizeof(repo_version_string),
+                 "%d", repo_version);
+       git_config_set("core.repositoryformatversion", repo_version_string);
+
+       if (hash_algo != GIT_HASH_SHA1)
+               git_config_set("extensions.objectformat",
+                              hash_algos[hash_algo].name);
+}
+
 static int create_default_files(const char *template_path,
                                const char *original_git_dir,
                                const struct repository_format *fmt)
@@ -185,12 +208,10 @@ static int create_default_files(const char *template_path,
        struct stat st1;
        struct strbuf buf = STRBUF_INIT;
        char *path;
-       char repo_version_string[10];
        char junk[2];
        int reinit;
        int filemode;
        struct strbuf err = STRBUF_INIT;
-       int repo_version = GIT_REPO_VERSION;
 
        /* Just look for `init.templatedir` */
        init_db_template_dir = NULL; /* re-set in case it was set before */
@@ -248,22 +269,7 @@ static int create_default_files(const char *template_path,
                        exit(1);
        }
 
-#ifndef ENABLE_SHA256
-       if (fmt->hash_algo != GIT_HASH_SHA1)
-               die(_("The hash algorithm %s is not supported in this build."), hash_algos[fmt->hash_algo].name);
-#endif
-
-       if (fmt->hash_algo != GIT_HASH_SHA1)
-               repo_version = GIT_REPO_VERSION_READ;
-
-       /* This forces creation of new config file */
-       xsnprintf(repo_version_string, sizeof(repo_version_string),
-                 "%d", repo_version);
-       git_config_set("core.repositoryformatversion", repo_version_string);
-
-       if (fmt->hash_algo != GIT_HASH_SHA1)
-               git_config_set("extensions.objectformat",
-                              hash_algos[fmt->hash_algo].name);
+       initialize_repository_version(fmt->hash_algo);
 
        /* Check filemode trustability */
        path = git_path_buf(&buf, "config");
diff --git a/cache.h b/cache.h
index 7a47e023bae84e7807c052acb6866f0d0f22a76b..0653318d2b73150e48d74a3e4b5e33bc1faff3aa 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -629,6 +629,7 @@ int path_inside_repo(const char *prefix, const char *path);
 int init_db(const char *git_dir, const char *real_git_dir,
            const char *template_dir, int hash_algo,
            unsigned int flags);
+void initialize_repository_version(int hash_algo);
 
 void sanitize_stdfds(void);
 int daemonize(void);