Browse Source

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>
maint
brian m. carlson 5 years ago committed by Junio C Hamano
parent
commit
e02a7141f8
  1. 10
      worktree.c

10
worktree.c

@ -449,7 +449,7 @@ const struct worktree *find_shared_symref(const char *symref,
int submodule_uses_worktrees(const char *path) int submodule_uses_worktrees(const char *path)
{ {
char *submodule_gitdir; char *submodule_gitdir;
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT, err = STRBUF_INIT;
DIR *dir; DIR *dir;
struct dirent *d; struct dirent *d;
int ret = 0; int ret = 0;
@ -463,18 +463,16 @@ int submodule_uses_worktrees(const char *path)
get_common_dir_noenv(&sb, submodule_gitdir); get_common_dir_noenv(&sb, submodule_gitdir);
free(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"); strbuf_addstr(&sb, "/config");
read_repository_format(&format, sb.buf); read_repository_format(&format, sb.buf);
if (format.version != 0) { if (verify_repository_format(&format, &err)) {
strbuf_release(&err);
strbuf_release(&sb); strbuf_release(&sb);
clear_repository_format(&format); clear_repository_format(&format);
return 1; return 1;
} }
clear_repository_format(&format); clear_repository_format(&format);
strbuf_release(&err);


/* Replace config by worktrees. */ /* Replace config by worktrees. */
strbuf_setlen(&sb, sb.len - strlen("config")); strbuf_setlen(&sb, sb.len - strlen("config"));

Loading…
Cancel
Save