mirror of
https://github.com/git/git.git
synced 2026-08-09 09:34:14 +00:00
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>
This commit is contained in:
committed by
Junio C Hamano
parent
30bc6f0e8c
commit
c1d233bd30
@@ -294,6 +294,7 @@ int repo_init(struct repository *repo,
|
||||
warning("%s", err.buf);
|
||||
goto error;
|
||||
}
|
||||
repo->objects = odb_new(repo, 0);
|
||||
|
||||
if (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,
|
||||
struct strbuf *err)
|
||||
{
|
||||
enum odb_new_flags odb_new_flags = 0;
|
||||
|
||||
if (verify_repository_format(format, err) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -1801,10 +1799,6 @@ int apply_repository_format(struct repository *repo,
|
||||
repo->repository_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;
|
||||
}
|
||||
|
||||
@@ -1888,6 +1882,7 @@ const char *enter_repo(struct repository *repo, const char *path, unsigned flags
|
||||
read_and_verify_repository_format(&fmt, ".", NULL);
|
||||
if (apply_repository_format(repo, &fmt, APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
||||
die("%s", err.buf);
|
||||
repo->objects = odb_new(repo, ODB_NEW_HONOR_ENV);
|
||||
startup_info->have_repository = 1;
|
||||
|
||||
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,
|
||||
APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
||||
die("%s", err.buf);
|
||||
repo->objects = odb_new(repo, ODB_NEW_HONOR_ENV);
|
||||
|
||||
clear_repository_format(&discovery.format);
|
||||
strbuf_release(&err);
|
||||
@@ -2651,11 +2647,13 @@ static int create_default_files(struct repository *repo,
|
||||
return reinit;
|
||||
}
|
||||
|
||||
static void create_object_directory(struct repository *repo)
|
||||
static void create_object_database(struct repository *repo)
|
||||
{
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
size_t baselen;
|
||||
|
||||
repo->objects = odb_new(repo, ODB_NEW_HONOR_ENV);
|
||||
|
||||
strbuf_addstr(&path, repo_get_object_directory(repo));
|
||||
baselen = path.len;
|
||||
|
||||
@@ -2866,7 +2864,6 @@ int init_db(struct repository *repo,
|
||||
repository_format_configure(&repo_fmt, hash, ref_storage_format);
|
||||
if (apply_repository_format(repo, &repo_fmt, APPLY_REPOSITORY_FORMAT_HONOR_ENV, &err) < 0)
|
||||
die("%s", err.buf);
|
||||
startup_info->have_repository = 1;
|
||||
|
||||
/*
|
||||
* 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))
|
||||
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)) {
|
||||
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
|
||||
* and basic data structures required for normal operation. Returns 0 on
|
||||
* success, a negative error code when the format is not valid as determined by
|
||||
* required for normal operation. Returns 0 on success, a negative error code
|
||||
* when the format is not valid as determined by
|
||||
* `verify_repository_format()`.
|
||||
*/
|
||||
int apply_repository_format(struct repository *repo,
|
||||
|
||||
Reference in New Issue
Block a user