@@ -19,6 +19,20 @@
static struct repository the_repo;
struct repository *the_repository = &the_repo;
+static void set_default_hash_algo(struct repository *repo)
+{
+ const char *hash_name;
+ int algo;
+
+ hash_name = getenv("GIT_DEFAULT_HASH_ALGORITHM");
+ if (!hash_name)
+ return;
+ algo = hash_algo_by_name(hash_name);
+ if (algo == GIT_HASH_UNKNOWN)
+ return;
+ repo_set_hash_algo(repo, algo);
+}
+
void initialize_repository(struct repository *repo)
{
repo->objects = raw_object_store_new();
@@ -26,6 +40,24 @@ void initialize_repository(struct repository *repo)
repo->parsed_objects = parsed_object_pool_new();
ALLOC_ARRAY(repo->index, 1);
index_state_init(repo->index, repo);
+
+ /*
+ * When a command runs inside a repository, it learns what
+ * hash algorithm is in use from the repository, but some
+ * commands are designed to work outside a repository, yet
+ * they want to access the_hash_algo, if only for the length
+ * of the hashed value to see if their input looks like a
+ * plausible hash value.
+ *
+ * We are in the process of identifying the codepaths and
+ * giving them an appropriate default individually; any
+ * unconverted codepath that tries to access the_hash_algo
+ * will thus fail. The end-users however have an escape hatch
+ * to set GIT_DEFAULT_HASH_ALGORITHM environment variable to
+ * "sha1" get back the old behaviour of defaulting to SHA-1.
+ */
+ if (repo == the_repository)
+ set_default_hash_algo(repo);
}
static void expand_base_dir(char **out, const char *in,
Partially revert c8aed5e8 (repository: stop setting SHA1 as the default object hash, 2024-05-07), to keep end-user systems still broken when we have gap in our test coverage but yet give them an escape hatch to set the GIT_TEST_DEFAULT_HASH_ALGORITHM environment variable to "sha1" in order to revert to the previous behaviour. Signed-off-by: Junio C Hamano <gitster@pobox.com> --- repository.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)