worktree: allow repository version 1

Git supports both repository versions 0 and 1.  These formats are
identical except for the presence of extensions.  When using an
extension, such as for a different hash algorithm, a check for only
version 0 causes the check to fail.  Instead, call
verify_repository_format to verify that we have an appropriate version
and no unknown extensions.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2020-02-22 20:17:41 +00:00 коммит произвёл Junio C Hamano
Родитель efa7ae36c1
Коммит e02a7141f8
1 изменённых файлов: 4 добавлений и 6 удалений

Просмотреть файл

@ -449,7 +449,7 @@ const struct worktree *find_shared_symref(const char *symref,
int submodule_uses_worktrees(const char *path)
{
char *submodule_gitdir;
struct strbuf sb = STRBUF_INIT;
struct strbuf sb = STRBUF_INIT, err = STRBUF_INIT;
DIR *dir;
struct dirent *d;
int ret = 0;
@ -463,18 +463,16 @@ int submodule_uses_worktrees(const char *path)
get_common_dir_noenv(&sb, submodule_gitdir);
free(submodule_gitdir);
/*
* The check below is only known to be good for repository format
* version 0 at the time of writing this code.
*/
strbuf_addstr(&sb, "/config");
read_repository_format(&format, sb.buf);
if (format.version != 0) {
if (verify_repository_format(&format, &err)) {
strbuf_release(&err);
strbuf_release(&sb);
clear_repository_format(&format);
return 1;
}
clear_repository_format(&format);
strbuf_release(&err);
/* Replace config by worktrees. */
strbuf_setlen(&sb, sb.len - strlen("config"));