]> git.ipfire.org Git - thirdparty/git.git/commitdiff
setup: add support for reading extensions.objectformat
authorbrian m. carlson <sandals@crustytoothpaste.net>
Wed, 29 Jul 2020 23:14:21 +0000 (23:14 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 30 Jul 2020 16:16:49 +0000 (09:16 -0700)
The transition plan specifies extensions.objectFormat as the indication
that we're using a given hash in a certain repo.  Read this as one of
the extensions we support.  If the user has specified an invalid value,
fail.

Ensure that we reject the extension if the repository format version is
0.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
setup.c

diff --git a/setup.c b/setup.c
index 3a81307602e2b029115f0c6db2c985508e590bd1..94e68bb4f48efc5707f0358a35d28c3d84f5c4fd 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -470,7 +470,16 @@ static int check_repo_format(const char *var, const char *value, void *vdata)
                        data->partial_clone = xstrdup(value);
                } else if (!strcmp(ext, "worktreeconfig"))
                        data->worktree_config = git_config_bool(var, value);
-               else
+               else if (!strcmp(ext, "objectformat")) {
+                       int format;
+
+                       if (!value)
+                               return config_error_nonbool(var);
+                       format = hash_algo_by_name(value);
+                       if (format == GIT_HASH_UNKNOWN)
+                               return error("invalid value for 'extensions.objectformat'");
+                       data->hash_algo = format;
+               } else
                        string_list_append(&data->unknown_extensions, ext);
        }
 
@@ -613,6 +622,11 @@ int verify_repository_format(const struct repository_format *format,
                return -1;
        }
 
+       if (format->version <= 0 && format->hash_algo != GIT_HASH_SHA1) {
+               strbuf_addstr(err, _("extensions.objectFormat is not valid in repo v0"));
+               return -1;
+       }
+
        return 0;
 }