return result;
}
+/*
+ * Check the repository format version in the path found in repo_get_git_dir(repo),
+ * and die if it is a version we don't understand. Generally one would
+ * set_git_dir() before calling this, and use it only for "are we in a valid
+ * repo?".
+ *
+ * If successful and fmt is not NULL, fill fmt with data.
+ */
+static void check_repository_format(struct repository *repo, struct repository_format *fmt)
+{
+ struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT;
+ if (!fmt)
+ fmt = &repo_fmt;
+ check_repository_format_gently(repo, repo_get_git_dir(repo), fmt, NULL);
+ startup_info->have_repository = 1;
+ repo_set_hash_algo(repo, fmt->hash_algo);
+ repo_set_compat_hash_algo(repo, fmt->compat_hash_algo);
+ repo_set_ref_storage_format(repo,
+ fmt->ref_storage_format,
+ fmt->ref_storage_payload);
+ repo->repository_format_worktree_config =
+ fmt->worktree_config;
+ repo->repository_format_submodule_path_cfg =
+ fmt->submodule_path_cfg;
+ repo->repository_format_relative_worktrees =
+ fmt->relative_worktrees;
+ repo->repository_format_partial_clone =
+ xstrdup_or_null(fmt->partial_clone);
+ clear_repository_format(&repo_fmt);
+}
+
const char *enter_repo(struct repository *repo, const char *path, unsigned flags)
{
static struct strbuf validated_path = STRBUF_INIT;
if (is_git_directory(".")) {
set_git_dir(repo, ".", 0);
- check_repository_format(NULL);
+ check_repository_format(repo, NULL);
return path;
}
return -(i & 0666);
}
-void check_repository_format(struct repository_format *fmt)
-{
- struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT;
- if (!fmt)
- fmt = &repo_fmt;
- check_repository_format_gently(the_repository, repo_get_git_dir(the_repository), fmt, NULL);
- startup_info->have_repository = 1;
- repo_set_hash_algo(the_repository, fmt->hash_algo);
- repo_set_compat_hash_algo(the_repository, fmt->compat_hash_algo);
- repo_set_ref_storage_format(the_repository,
- fmt->ref_storage_format,
- fmt->ref_storage_payload);
- the_repository->repository_format_worktree_config =
- fmt->worktree_config;
- the_repository->repository_format_submodule_path_cfg =
- fmt->submodule_path_cfg;
- the_repository->repository_format_relative_worktrees =
- fmt->relative_worktrees;
- the_repository->repository_format_partial_clone =
- xstrdup_or_null(fmt->partial_clone);
- clear_repository_format(&repo_fmt);
-}
-
/*
* Returns the "prefix", a path to the current working directory
* relative to the work tree root, or NULL, if the current working
* config file, so this will not fail. What we are catching
* is an attempt to reinitialize new repository with an old tool.
*/
- check_repository_format(&repo_fmt);
+ check_repository_format(the_repository, &repo_fmt);
repository_format_configure(the_repository, &repo_fmt, hash, ref_storage_format);