]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/init-db: add environment variable for new repo hash
authorbrian m. carlson <sandals@crustytoothpaste.net>
Sat, 22 Feb 2020 20:17:39 +0000 (20:17 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Feb 2020 17:33:29 +0000 (09:33 -0800)
For the foreseeable future, SHA-1 will be the default algorithm for Git.
However, when running the testsuite, we want to be able to test an
arbitrary algorithm. It would be quite burdensome and very untidy to
have to specify the algorithm we'd like to test every time we
initialized a new repository somewhere in the testsuite, so add an
environment variable to allow us to specify the default hash algorithm
for Git.

This has the benefit that we can set it once for the entire testsuite
and not have to think about it. In the future, users can also use it to
set the default for their repositories if they would like to do so.

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

index b0672bd8065fe0cb61ca9e4563b8932a501fb3d9..9d6769e95ab1d356e6c8b07671ac11446a2acc96 100644 (file)
@@ -493,6 +493,12 @@ double-quotes and respecting backslash escapes. E.g., the value
        details. This variable has lower precedence than other path
        variables such as GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY...
 
+`GIT_DEFAULT_HASH_ALGORITHM`::
+       If this variable is set, the default hash algorithm for new
+       repositories will be set to this value. This value is currently
+       ignored when cloning; the setting of the remote repository
+       is used instead. The default is "sha1".
+
 Git Commits
 ~~~~~~~~~~~
 `GIT_AUTHOR_NAME`::
index d05552f0ae135d9ab7d0459f215cad24d952839d..ab4fd682ab8be02f91f0f01d1dcadb7cd9b5f974 100644 (file)
@@ -20,6 +20,8 @@
 #define TEST_FILEMODE 1
 #endif
 
+#define GIT_DEFAULT_HASH_ENVIRONMENT "GIT_DEFAULT_HASH"
+
 static int init_is_bare_repository = 0;
 static int init_shared_repository = -1;
 static const char *init_db_template_dir;
@@ -356,6 +358,7 @@ static void separate_git_dir(const char *git_dir, const char *git_link)
 
 static void validate_hash_algorithm(struct repository_format *repo_fmt, int hash)
 {
+       const char *env = getenv(GIT_DEFAULT_HASH_ENVIRONMENT);
        /*
         * If we already have an initialized repo, don't allow the user to
         * specify a different algorithm, as that could cause corruption.
@@ -365,6 +368,12 @@ static void validate_hash_algorithm(struct repository_format *repo_fmt, int hash
                die(_("attempt to reinitialize repository with different hash"));
        else if (hash != GIT_HASH_UNKNOWN)
                repo_fmt->hash_algo = hash;
+       else if (env) {
+               int env_algo = hash_algo_by_name(env);
+               if (env_algo == GIT_HASH_UNKNOWN)
+                       die(_("unknown hash algorithm '%s'"), env);
+               repo_fmt->hash_algo = env_algo;
+       }
 }
 
 int init_db(const char *git_dir, const char *real_git_dir,