mirror of
https://github.com/git-for-windows/git.git
synced 2026-06-11 08:30:32 -05:00
setup: stop initializing object database without repository
The function `setup_git_directory_gently()` is responsible for discovering and setting up a Git repository based on various environment variables and the current working directory. The result is thus a fully usable Git repository. One oddity of this function is that we may set up the object database even in the case where we don't have a repository, namely in the case where the `GIT_DIR_EXPLICIT` environment variable is set but points to a non-existent repository. If so, we call `setup_git_env_internal()` with the value of the environment variable so that the repository's Git directory is configured, even if it points to a non-existent directory. Historically though, this function didn't only configure the repository, but also initialized the object database. We retained this behaviour from a preceding commit, even though it really doesn't make much sense in the first place -- there is no repository, so we don't have an object database either. There seemingly isn't much of a reason to construct the object database, as we typically won't try to read objects when we don't have an object database. There's one exception though: git-index-pack(1) may run outside of a repository, which can be used to perform consistency checks for a packfile. The code path is _almost_ working: we already know to call `parse_object_buffer()`, which can read objects without an object database being available. And that works for all object types except for commits, because `parse_commit_buffer()` calls `parse_commit_graph()`, and that function doesn't handle the case where we don't have an object database. Fix this instance to check for the object database instead of checking for the Git directory having been initialized. With this fixed, we can now stop constructing an object database completely. 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
aae4ebc895
commit
d87de311ff
@@ -740,13 +740,13 @@ static struct commit_graph *prepare_commit_graph(struct repository *r)
|
||||
struct odb_source *source;
|
||||
|
||||
/*
|
||||
* Early return if there is no git dir or if the commit graph is
|
||||
* Early return if there is no object database or if the commit graph is
|
||||
* disabled.
|
||||
*
|
||||
* This must come before the "already attempted?" check below, because
|
||||
* we want to disable even an already-loaded graph file.
|
||||
*/
|
||||
if (!r->gitdir || r->commit_graph_disabled)
|
||||
if (!r->objects || r->commit_graph_disabled)
|
||||
return NULL;
|
||||
|
||||
if (r->objects->commit_graph_attempted)
|
||||
|
||||
Reference in New Issue
Block a user