repo-settings: consolidate some config settings

There are a few important config settings that are not loaded
during git_default_config. These are instead loaded on-demand.

Centralize these config options to a single scan, and store
all of the values in a repo_settings struct. The values for
each setting are initialized as negative to indicate "unset".

This centralization will be particularly important in a later
change to introduce "meta" config settings that change the
defaults for these config settings.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee
2019-08-13 11:37:43 -07:00
committed by Junio C Hamano
parent 9c9b961d7e
commit 7211b9e753
7 changed files with 58 additions and 19 deletions

25
repo-settings.c Normal file
View File

@ -0,0 +1,25 @@
#include "cache.h"
#include "config.h"
#include "repository.h"
void prepare_repo_settings(struct repository *r)
{
int value;
if (r->settings.initialized)
return;
/* Defaults */
memset(&r->settings, -1, sizeof(r->settings));
if (!repo_config_get_bool(r, "core.commitgraph", &value))
r->settings.core_commit_graph = value;
if (!repo_config_get_bool(r, "gc.writecommitgraph", &value))
r->settings.gc_write_commit_graph = value;
if (!repo_config_get_bool(r, "index.version", &value))
r->settings.index_version = value;
if (!repo_config_get_bool(r, "pack.usesparse", &value))
r->settings.pack_use_sparse = value;
}