From: brian m. carlson Date: Sat, 22 Feb 2020 20:17:41 +0000 (+0000) Subject: worktree: allow repository version 1 X-Git-Tag: v2.27.0-rc0~156^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e02a7141f83326f7098800fed764061ecf1f0eff;p=thirdparty%2Fgit.git 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 Signed-off-by: Junio C Hamano --- diff --git a/worktree.c b/worktree.c index 5b4793caa3..d1d23aadb4 100644 --- a/worktree.c +++ b/worktree.c @@ -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"));