Skip to content

Commit 3c9331a

Browse files
bk2204gitster
authored andcommitted
builtin/init-db: add environment variable for new repo hash
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 8b8f718 commit 3c9331a

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

Documentation/git.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,12 @@ double-quotes and respecting backslash escapes. E.g., the value
493493
details. This variable has lower precedence than other path
494494
variables such as GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY...
495495

496+
`GIT_DEFAULT_HASH_ALGORITHM`::
497+
If this variable is set, the default hash algorithm for new
498+
repositories will be set to this value. This value is currently
499+
ignored when cloning; the setting of the remote repository
500+
is used instead. The default is "sha1".
501+
496502
Git Commits
497503
~~~~~~~~~~~
498504
`GIT_AUTHOR_NAME`::

builtin/init-db.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#define TEST_FILEMODE 1
2121
#endif
2222

23+
#define GIT_DEFAULT_HASH_ENVIRONMENT "GIT_DEFAULT_HASH"
24+
2325
static int init_is_bare_repository = 0;
2426
static int init_shared_repository = -1;
2527
static const char *init_db_template_dir;
@@ -356,6 +358,7 @@ static void separate_git_dir(const char *git_dir, const char *git_link)
356358

357359
static void validate_hash_algorithm(struct repository_format *repo_fmt, int hash)
358360
{
361+
const char *env = getenv(GIT_DEFAULT_HASH_ENVIRONMENT);
359362
/*
360363
* If we already have an initialized repo, don't allow the user to
361364
* 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
365368
die(_("attempt to reinitialize repository with different hash"));
366369
else if (hash != GIT_HASH_UNKNOWN)
367370
repo_fmt->hash_algo = hash;
371+
else if (env) {
372+
int env_algo = hash_algo_by_name(env);
373+
if (env_algo == GIT_HASH_UNKNOWN)
374+
die(_("unknown hash algorithm '%s'"), env);
375+
repo_fmt->hash_algo = env_algo;
376+
}
368377
}
369378

370379
int init_db(const char *git_dir, const char *real_git_dir,

0 commit comments

Comments
 (0)