setup: defer object database creation
In a subsequent commit we'll make the creation of the on-disk data structures of an object database pluggable. This will lead to an in-between state where we have already configured the repository's object database, but it's not usable yet until we eventually call `create_object_directory()`. Lift the call to `odb_new()` out of `apply_repository_format()` so that callers have more wiggle room with when exactly they call it, and adapt them accordingly. The only exception is `init_db()`, where we now defer creating the object database until we call `create_object_database()`. With this change, initializing and creating the object database on disk is now neatly encapsulated in a single function, which will make it easier for a subsequent commit to move creation of the on-disk data structures into the `struct odb_source` backends. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>main
parent
30bc6f0e8c
commit
c1d233bd30
|
|
@ -294,6 +294,7 @@ int repo_init(struct repository *repo,
|
||||||
warning("%s", err.buf);
|
warning("%s", err.buf);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
repo->objects = odb_new(repo, 0);
|
||||||
|
|
||||||
if (worktree)
|
if (worktree)
|
||||||
repo_set_worktree(repo, worktree);
|
repo_set_worktree(repo, worktree);
|
||||||
|
|
|
||||||
17
setup.c
17
setup.c
|
|
@ -1765,8 +1765,6 @@ int apply_repository_format(struct repository *repo,
|
||||||
enum apply_repository_format_flags flags,
|
enum apply_repository_format_flags flags,
|
||||||
struct strbuf *err)
|
struct strbuf *err)
|
||||||
{
|
{
|
||||||
enum odb_new_flags odb_new_flags = 0;
|
|
||||||
|
|
||||||
if (verify_repository_format(format, err) < 0)
|
if (verify_repository_format(format, err) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
@ -1801,10 +1799,6 @@ int apply_repository_format(struct repository *repo,
|
||||||
repo->repository_format_precious_objects =
|
repo->repository_format_precious_objects =
|
||||||
format->precious_objects;
|
format->precious_objects;
|
||||||
|
|
||||||
if (flags & APPLY_REPOSITORY_FORMAT_HONOR_ENV)
|
|
||||||
odb_new_flags |= ODB_NEW_HONOR_ENV;
|
|
||||||
repo->objects = odb_new(repo, odb_new_flags);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1888,6 +1882,7 @@ const char *enter_repo(struct repository *repo, const char *path, unsigned flags
|
||||||
read_and_verify_repository_format(&fmt, ".", NULL);
|
read_and_verify_repository_format(&fmt, ".", NULL);
|
||||||
if (apply_repository_format(repo, &fmt, APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
if (apply_repository_format(repo, &fmt, APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
||||||
die("%s", err.buf);
|
die("%s", err.buf);
|
||||||
|
repo->objects = odb_new(repo, ODB_NEW_HONOR_ENV);
|
||||||
startup_info->have_repository = 1;
|
startup_info->have_repository = 1;
|
||||||
|
|
||||||
clear_repository_format(&fmt);
|
clear_repository_format(&fmt);
|
||||||
|
|
@ -2090,6 +2085,7 @@ const char *setup_git_directory_gently(struct repository *repo, int *nongit_ok)
|
||||||
if (apply_repository_format(repo, &discovery.format,
|
if (apply_repository_format(repo, &discovery.format,
|
||||||
APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
||||||
die("%s", err.buf);
|
die("%s", err.buf);
|
||||||
|
repo->objects = odb_new(repo, ODB_NEW_HONOR_ENV);
|
||||||
|
|
||||||
clear_repository_format(&discovery.format);
|
clear_repository_format(&discovery.format);
|
||||||
strbuf_release(&err);
|
strbuf_release(&err);
|
||||||
|
|
@ -2651,11 +2647,13 @@ static int create_default_files(struct repository *repo,
|
||||||
return reinit;
|
return reinit;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void create_object_directory(struct repository *repo)
|
static void create_object_database(struct repository *repo)
|
||||||
{
|
{
|
||||||
struct strbuf path = STRBUF_INIT;
|
struct strbuf path = STRBUF_INIT;
|
||||||
size_t baselen;
|
size_t baselen;
|
||||||
|
|
||||||
|
repo->objects = odb_new(repo, ODB_NEW_HONOR_ENV);
|
||||||
|
|
||||||
strbuf_addstr(&path, repo_get_object_directory(repo));
|
strbuf_addstr(&path, repo_get_object_directory(repo));
|
||||||
baselen = path.len;
|
baselen = path.len;
|
||||||
|
|
||||||
|
|
@ -2866,7 +2864,6 @@ int init_db(struct repository *repo,
|
||||||
repository_format_configure(&repo_fmt, hash, ref_storage_format);
|
repository_format_configure(&repo_fmt, hash, ref_storage_format);
|
||||||
if (apply_repository_format(repo, &repo_fmt, APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
if (apply_repository_format(repo, &repo_fmt, APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
||||||
die("%s", err.buf);
|
die("%s", err.buf);
|
||||||
startup_info->have_repository = 1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ensure `core.hidedotfiles` is processed. This must happen after we
|
* Ensure `core.hidedotfiles` is processed. This must happen after we
|
||||||
|
|
@ -2882,7 +2879,9 @@ int init_db(struct repository *repo,
|
||||||
|
|
||||||
if (!(flags & INIT_DB_SKIP_REFDB))
|
if (!(flags & INIT_DB_SKIP_REFDB))
|
||||||
create_reference_database(repo, initial_branch, flags & INIT_DB_QUIET);
|
create_reference_database(repo, initial_branch, flags & INIT_DB_QUIET);
|
||||||
create_object_directory(repo);
|
create_object_database(repo);
|
||||||
|
|
||||||
|
startup_info->have_repository = 1;
|
||||||
|
|
||||||
if (repo_settings_get_shared_repository(repo)) {
|
if (repo_settings_get_shared_repository(repo)) {
|
||||||
char buf[10];
|
char buf[10];
|
||||||
|
|
|
||||||
4
setup.h
4
setup.h
|
|
@ -245,8 +245,8 @@ enum apply_repository_format_flags {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apply the given repository format to the repo. This initializes extensions
|
* Apply the given repository format to the repo. This initializes extensions
|
||||||
* and basic data structures required for normal operation. Returns 0 on
|
* required for normal operation. Returns 0 on success, a negative error code
|
||||||
* success, a negative error code when the format is not valid as determined by
|
* when the format is not valid as determined by
|
||||||
* `verify_repository_format()`.
|
* `verify_repository_format()`.
|
||||||
*/
|
*/
|
||||||
int apply_repository_format(struct repository *repo,
|
int apply_repository_format(struct repository *repo,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue